Linq to sql LINQ到SQL-分组依据/位置

Linq to sql LINQ到SQL-分组依据/位置,linq-to-sql,Linq To Sql,我正在尝试在ASP.NET MVC中实现组消息传递功能。我想显示特定ContactID的所有线程列表,显示该线程中的最新消息(无论消息来自谁)。我已将我的表格设置如下: MessageID ThreadID MessageBody ContactID 10000004 300152,300160, msg1 300160 10000005 300152,300160, msg2 300160 10000008 300152,300160, msg3 300152 我能够显示按ThreadID分

我正在尝试在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
但是,如果我在group by之前添加Where子句(请参见下文),则在执行group by之前,它将首先过滤ContactID,并生成以下结果:

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进行过滤

    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(),
                 };
希望它能帮助你,祝你度过愉快的一天