给出此Linq查询:
GetData.Where(p => p.LastActionA >= startDate && p.LastActionA <= endDate)
如何更改它,以便可以匹配2个日期列中的最大值?
例如GetData.Where(MAX(p.LastActionA, p.LastActionB) >= startDate
我可以获得的最接近的等效SQL使用子查询,如下所示:
SELECT ID,
(SELECT MAX(v) FROM (VALUES (LastActionA), (LastActionB)) AS value(v)) as MaxDate
FROM Data
答案 0 :(得分:1)
对于仅两个日期,您可以使用C#条件运算符(在最新的EF6和EF Core中均可使用):
.Where(p => (p.LastActionA > p.LastActionB ? p.LastActionA : p.LastActionB) >= startDate)
以下内容适用于2个或更多日期,但仅适用于EF6(生成更差的SQL)。实际上,它也可以在EF Core中使用,但是会导致客户评估,这很糟糕:
.Where(p => new [] { p.LastActionA, p.LastActionB }.Max() >= startDate)