LINQ问题与创建关系(linq issue with creating relationships

2019-10-16 15:35发布

看来我也要用我的LINQ一个小问题,我有一组和datacontract我有消息的单独datacontract。 消息可以是一个集团的一部分。 然而,当我更新消息记录时,我列出了组信息的不反映,该消息仍是该组的相同。 但是,还没有更新被反映时,我直接列表的邮件?

这是我添加消息到组:

    //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 });
        }

    }

说真的不明白怎么回事,如果我添加消息到组我做出邮件进行任何更改应该反映。 我能想到的唯一的事情就是它的加入已经存在的消息,这意味着我的更新方法只复制消息的新实例,但如果是这种新纪录拷入甚至举行。 如果其难以修复我怎么能更新已copyedTo /添加到组,而不是(便宜的解决方法)的消息?

Answer 1:

假设一个组可以拥有消息和消息可以有组,你正试图保持5件事情:

  1. 所有组的列表List<Group> Groups = ...
  2. 所有消息的列表List<Message> messages = ...
  3. 每个组中的消息List<Message> GroupMessages...
  4. 组每个消息List<Group> MessageGroup...在消息
  5. 实际的消息发送给在几个地方更新组

从我可以看到它是没有被正确地维护最后一个:

  • AddMessagetoGroup您关联一个“新” MessageGroup.GroupMessages 。 这是一类的新实例,当你更新等信息情况下不会自动更新。 仅仅因为两个消息具有相同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);
        }
    }
}

请注意,此功能也将创建消息,并确保有在总要么消息或消息针对任何特定群体没有重复。



文章来源: linq issue with creating relationships