LINQ 匹配 2 列的最新日期

LINQ match on latest date from 2 columns

给出这个 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

对于仅 2 个日期,您可以使用 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)