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