【问题标题】:LINQ match on latest date from 2 columns2 列中最新日期的 LINQ 匹配
【发布时间】:2019-02-04 12:59:49
【问题描述】:

给出这个 Linq 查询:

GetData.Where(p => p.LastActionA >= startDate && p.LastActionA <= endDate)

如何更改它以便匹配 2 个日期列中的最大值?

比如GetData.Where(MAX(p.LastActionA, p.LastActionB) &gt;= startDate

我可以获得的最接近的等效 SQL 使用子查询,如下所示:

SELECT ID,
  (SELECT MAX(v)  FROM (VALUES (LastActionA), (LastActionB)) AS value(v)) as MaxDate
FROM Data

【问题讨论】:

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


【解决方案1】:

只需 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    相关资源
    最近更新 更多