linq创建关系的问题

时间:2012-04-27 05:57:05

标签: c# linq entity-relationship datacontract

似乎我的linq有点问题,我有一个数据集合,我有一个单独的数据收集消息。消息可以是组的一部分。但是,当我更新消息记录时,当我列出组信息时,它没有反映出来,该消息对于该组仍然是相同的。但是当我直接列出消息时会反映更新吗?

这是我向群组添加消息的方式:

    //lists for reference:
    List<Group> Groups = new List<Group>();
    List<Message> messages = new List<Message>();

    //not sure the below method is correct for adding a message to a group
    public void AddMessagetoGroup(string group, string messageID, string message)
    {
        var result = Groups.Where(n => String.Equals(n.GroupName, group)).FirstOrDefault();
        var result1 = messages.Where(n => String.Equals(n.MessageID, messageID)).FirstOrDefault();
        if (result != null)
        {
            result.GroupMessages.Add(new Message() { MessageID = messageID, GroupMessage = message });
        }
        if (result1 != null)
        {
            result1.MessageGroup.Add(new Group() { GroupName = group });
        }

    }

严重不明白最新情况,如果我将消息添加到组中,我应该反映对消息所做的任何更改。我唯一能想到的是它添加了一个已经存在的消息的新实例,这意味着我的更新方法只是复制消息,但是这个新的拷贝记录甚至保持在哪里。如果难以修复,我怎么能更新已经被复制到/添加到组中的消息(廉价的解决方法)?

1 个答案:

答案 0 :(得分:1)

假设一个群组可以拥有消息而消息可以拥有群组,那么您正在尝试维护以下内容:

  1. 所有群组的列表List<Group> Groups = ...
  2. 所有讯息的列表List<Message> messages = ...
  3. 中每个组List<Message> GroupMessages...的消息
  4. 消息
  5. 中每条消息List<Group> MessageGroup...的组
  6. 要发送到多个地方更新的群组的实际消息
  7. 从我能看到的是最后一个没有正确维护的:

    • AddMessagetoGroup中,您将“新”MessageGroup.GroupMessages相关联。这是类的新实例,在更新其他Message实例时不会自动更新。仅仅因为两条消息具有相同的MessageId并不意味着它们是同一个实例。

    • UpdateMessage中,您更改了特定邮件,但仅在邮件列表中。这并未指向组列表中的相同消息。

    总而言之,您需要一个重构器才能真正获得您希望它执行的代码。我看待它的方式是你希望将组和消息分开,并从另一个引用一次而不是创建副本。

    首先,主列表:

    List<Group> Groups = new List<Group>();
    List<Message> Messages = new List<Message>();
    

    其次,创建更新消息(您还没有创建部分):

    public Message CreateOrUpdateMessage(string messageID, string groupMessage)
    {
        var findmessage = Messages.Where(s => s.MessageID == messageID).FirstOrDefault();
    
        if (findmessage != null)
        {
            findmessage.GroupMessage = groupMessage;
        }
        else
        {
            findmessage = new Message() { MessageID = messageID, GroupMessage = groupMessage};
            Messages.Add(findmessage);
        }
    
        return findmessage;
    }
    

    请注意如何将此消息添加到“消息”列表中。这是应该添加或更改消息的唯一功能。

    最后将消息添加到组中(注意我不担心在这里添加组):

    public void AddMessagetoGroup(string group, string messageID, string message)
    {
        var findmessage = CreateOrUpdateMessage(messageID, message); 
        var findgroup = Groups.Where(n => String.Equals(n.GroupName, group)).FirstOrDefault();
    
        if (findgroup != null)
        {
            if (findgroup.GroupMessages.Where(m => m.MessageID == messageID).Count() == 0)
            {
                findgroup.GroupMessages.Add(findmessage);
                findmessage.MessageGroup.Add(findgroup);
            }
        }
    }
    

    请注意,此功能还会创建消息,并确保消息总数或任何特定组的消息中没有重复。

相关问题