问题描述
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
,以便能够选择StateId
和TransactionId
。
这应该可行:
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();