LINQ匹配2列中的最新日期

时间:2019-02-04 12:59:50

标签: entity-framework linq-to-entities max

给出此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

1 个答案:

答案 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)