微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LINQ在分组后选择具有最大值的行

如何解决LINQ在分组后选择具有最大值的行

我有以下sql语句:

Select 
   tsl.Transaction_Id,tsl.State_Id,MAX(tsl."Timestamp") 
from TransactionStatesLog tsl 
group by tsl.Transaction_Id

如何将此语句转换为LINQ?我只想选择整行,其中“时间戳”是该组的最大值。

使用此代码,我只能从组中选择TransactionId和最大Timestamp

var states = (from logs in _context.TransactionStatesLog
              group logs by new { logs.TransactionId } into g
              select new
              {
                  TransactionId = g.Key,Timestamp = g.Max(x => x.Timestamp)
              }).ToList();

我正在使用ef core 3.1

解决方法

假设您忘记将tsl.State_Id作为分组键添加到SQL中,如下所示(否则SQL也不起作用):

Select 
   tsl.Transaction_Id,tsl.State_Id,MAX(tsl."Timestamp") 
from TransactionStatesLog tsl 
group by tsl.Transaction_Id,tsl.State_Id

如果我对您的理解正确,则还需要向分组语句中添加StateId,以便能够选择StateIdTransactionId

这应该可行:

var states = (from logs in _context.TransactionStatesLog
              group logs by new { logs.TransactionId,logs.StateId } into g
              select new
              {
                  TransactionId = g.Key.TransactionId,StateId = g.Key.StateId,Timestamp = g.Max(x => x.Timestamp)
              }).ToList();

请参阅:Group by with multiple columns using lambda

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。