美好的一天,
感谢您的时间。
我想通过userId和projectId获取聊天表的最新消息,并且工作正常
select * from chatTable inner join
(select max(SendDate) maxtime,[ProjectId] from [chatTable]
group by [ProjectId])latest
on latest.maxtime=chatTable.SendDate and
latest.[ProjectId]=chatTable.[ProjectId]
order by SendDate
如您所见,我正在从chatTable中获取最新消息,并带有一个带最新项目ID和最新消息的联接。
如何使用扩展方法使用linq?
var messages= await _dbContext.chatTable.....
谢谢
答案 0 :(得分:1)
您可以先查询内部内容,如下所示:
var latest= _dbContext.chatTable.GroupBy(x=>x.ProjectId).Select(x=>new {maxTime=x.Max(y=>y.SendDate), ProjectId=x.Key });
var res=(from ct in _dbContext.ChatTable
join la in latest on la.maxTime equals ct.SendDate and la.ProjectId equals ct.ProjectId).ToList().OrderBy(x=>x.SendDate);
答案 1 :(得分:0)
好吧,看来linq实体框架有其优势 此查询更好,并且可以将最新消息发送到最新项目
var ultimos = await _dbContext.chatTable .GroupBy(item => item.ProjectId)
.Select(group => new { pId= group.Key, latestMessage= group.OrderByDescending(r=>r.SendDate)
.FirstOrDefault() })
.ToListAsync();
,所有消息都在实体内部
答案 2 :(得分:0)
此查询应执行您想要的
_dbContext.ChatTable
.GroupBy(c => c.ProjectId)
.Select(g => g
.OrderByDescending(c => c.SendDate)
.First())
.OrderBy(c => c.SendDate);
答案 3 :(得分:0)
这应该可以满足您的需求:
_dbContext.chatTable
.GroupBy(c => c.ProjectId)
.Select(g => g.OrderBy(c => c.SendDate).LastOrDefault())