Linq to sql LINQ到SQL-分组依据/位置
我正在尝试在ASP.NET MVC中实现组消息传递功能。我想显示特定ContactID的所有线程列表,显示该线程中的最新消息(无论消息来自谁)。我已将我的表格设置如下: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分
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(),
};
希望它能帮助你,祝你度过愉快的一天