LINQ to SQL - группировка по / где - PullRequest
0 голосов
/ 16 ноября 2010

Я пытаюсь реализовать функцию обмена сообщениями в ASP.NET MVC.Я хочу отобразить список всех тем для определенного ContactID, отображая последнее сообщение в этой теме (независимо от того, от кого оно).Я настроил свою таблицу, как показано ниже:

MessageID ThreadID MessageBody ContactID
10000004 300152,300160, msg1 300160
10000005 300152,300160, msg2 300160
10000008 300152,300160, msg3 300152

Мне удалось отобразить последнее сообщение, сгруппированное по ThreadID.Пример:

ThreadID Count LatestMessage
300152,300160, 3 10000008

Однако, если я добавлю предложение Where перед группой by (см. Ниже), она сначала отфильтрует по ContactID перед выполнением группы by и выдаст такой результат:

ThreadID Count LatestMessage
300152,300160, 2 10000005

Вот код:

        var result = from s in pdc.Messages
                     where s.ContactID == contactID
                     group new { s } by new { s.ThreadID } into d
                     let maxMsgID = d.Max(x => x.s.MessageID)
                     select new {
                         ThreadID = d.Key.ThreadID,
                         Count = d.Count(item => item.s.MessageType == GlobalConstants.MessageTypeText),
                         LastMessage = d.Where(x => x.s.MessageID == maxMsgID)
                     };

Есть ли способ создать группу, а затем выполнить фильтрацию по ContactID?

1 Ответ

0 голосов
/ 22 июня 2012
    var result = from s in pdc.Messages
                 where s.ContactID == contactID
                 group new { s } by new { s.ThreadID } into d
                 select new {
                     ThreadID = d.Key,
                     Count = d.Count(item => item.s.MessageType == GlobalConstants.MessageTypeText),
                     LastMessage = d.select(x => x.s.MessageID).Max(),
                 };

Надеюсь, это поможет вам и хорошего дня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...