Есть ли способ группировки по нескольким столбцам, как если бы столбцы были объединены в C # с использованием Linq? Допустим, у меня есть объект, представляющий сообщение, отправленное одним пользователем другому:
public class Message
{
public Int32 SenderId { get; set; }
public Int32 RecipientId { get; set; }
public String Text { get; set; }
public DateTime SentAt { get; set; }
}
Я получаю набор из них из репозитория, а затем мне нужно упорядочить их по дате отправки и отфильтровать по паре SenderIdRecipientId. Но я хочу получить только самое последнее сообщение из данного диалога между двумя пользователями. Направление не имеет значения, поэтому (SenderId == 1 && RecipientId == 2) следует рассматривать как (SenderId == 2 && RecipientId == 1).
Пока я получил это:
Messages
.GroupBy(m => new { m.SenderId, m.RecipientId })
.Select(gm => gm.OrderByDescending(m => m.SentAt).FirstOrDefault());
Но проблема с этим подходом состоит в том, что когда я получаю сообщение от пользователя 1 к пользователю 2 и наоборот 2 => 1, оба получатбыть возвращенным. Поскольку ключ (1,2) не совпадает с (2,1).
Любые предложения будут хорошими. Спасибо!
UPD: я должен был добавить, что использую выражение с выражением IQueriable. Так что это LINQ to Entity.