看来我也要用我的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 /添加到组,而不是(便宜的解决方法)的消息?
假设一个组可以拥有消息和消息可以有组,你正试图保持5件事情:
- 所有组的列表
List<Group> Groups = ...
- 所有消息的列表
List<Message> messages = ...
- 每个组中的消息
List<Message> GroupMessages...
组 - 组每个消息
List<Group> MessageGroup...
在消息 - 实际的消息发送给在几个地方更新组
从我可以看到它是没有被正确地维护最后一个:
所有的一切,你需要一个重构才能真正得到你的代码,你想要它做的事。 我看到它的方式是,你想从其他养群和信息分开,并参考一次,而不是创建副本。
首先,主列表:
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);
}
}
}
请注意,此功能也将创建消息,并确保有在总要么消息或消息针对任何特定群体没有重复。