У меня есть система личных сообщений, которая больше похожа на стиль Google Mail. Я имею в виду, что сообщения сгруппированы в разговоры. Если пользователь получает сообщение, оно появляется в его почтовом ящике. Кроме того, этот пользователь отправляет сообщение кому-то, кто, в свою очередь, отвечает, тогда это сообщение также появляется в его почтовом ящике.
Некоторые сообщения извлекаются в обоих запросах, которые в конечном итоге группируются в один список. Я попытался удалить дубликаты, выполнив то, что сделал Джон Скит в удалении дубликатов из списка 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 thread = (из c в tmp, где GetReplies (user, c.Id) .Count ()> 0 выберите c) .ToList (); var threadByUser = user.ReceivedMessages.Where (m => m.DisplayInInbox.Equals (true) && m.ParentId.Equals (null)). ToList (); threads.AddRange (threadByUser); Threads.Distinct (). ToList (); возвращать потоки; }
Я что-то здесь делаю не так?