我有一个更像 Google Mail 风格的 PM 系统。我的意思是消息被分组到对话中。如果用户收到一条消息,它会显示在他们的收件箱中。此外,该用户向某个人发送一条消息,该人反过来回复,然后该消息也会显示在他们的收件箱中。
在两个查询中都检索到一些消息,这些消息最终被分组到一个列表中。我试图通过执行 Jon Skeet从 C# 列表中删除重复项所做的操作来删除重复项,但我仍然不断收到重复项。这是我的代码:
更新:
public class Message : IEquatable<Message>
{
public int Id { get; set; }
[MaxLength(150)]
public string Subject { get; set; }
[MaxLength(3000)]
public string Content { get; set; }
public DateTime DateSent { get; set; }
public DateTime? LastViewed { get; set; }
public bool IsRead { get; set; }
public bool DisplayInInbox { get; set; }
public virtual User SentBy { get; set; }
public virtual User ReceivedBy { get; set; }
public int? ParentId { get; set; }
public override bool Equals(object other)
{
return Equals(other as Message);
}
public bool Equals(Message other)
{
if (object.ReferenceEquals(other, null))
{
return false;
}
if (object.ReferenceEquals(other, this))
{
return true;
}
return Id == other.Id;
}
public override int GetHashCode()
{
return this.Id;
}
}
//MessagingService 内部 public IList GetThreads(User user) { //获取所有未回复的消息。var tmp = _repository.GetMany(c => c.DisplayInInbox.Equals(true) && c.ParentId.Equals(null)); var threads = (from c in tmp where GetReplies(user, c.Id).Count() > 0 select c).ToList(); var threadsByUser = user.ReceivedMessages.Where(m => m.DisplayInInbox.Equals(true) && m.ParentId.Equals(null)).ToList(); 线程.AddRange(threadsByUser); 线程.Distinct().ToList(); 返回线程;}
我在这里做错了吗?