Google Mail スタイルに近い PM システムを使用しています。つまり、メッセージは会話にグループ化されます。ユーザーがメッセージを受信すると、受信トレイに表示されます。また、このユーザーが誰かにメッセージを送信し、その人が返信を返すと、このメッセージも受信トレイに表示されます。
一部のメッセージは両方のクエリで取得され、最終的に 1 つのリストにグループ化されます。リスト C# から重複を削除する際に Jon Skeet が行ったことを実行して、重複を削除しようとしましたが、それでも重複が発生し続けます。これが私のコードです:
更新しました:
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 スレッド = (GetReplies(user, c.Id).Count() > 0 を選択する tmp の c から c).ToList(); var threadsByUser = user.ReceivedMessages.Where(m => m.DisplayInInbox.Equals(true) && m.ParentId.Equals(null)).ToList(); スレッド.AddRange(threadsByUser); スレッド.Distinct().ToList(); スレッドを返します。}
ここで何か間違ったことをしていますか?