entity-framework - 2 列中最新日期的 LINQ 匹配
问题描述
给出这个 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)
推荐阅读
- matrix - 如何在没有模块的情况下在 OCAML 中将 2 个矩阵相加?
- unit-testing - 您是否在代码覆盖率中包含测试文件?
- python - 查找 Tensorflow 操作的输入张量
- azure - Azure Policy VM 备份 DeployIfNotExist PolicyEvaluationRetriesExceeded
- javascript - 从 JSON 目录树中的文件完整路径计算目录
- html - 改变宽度值不会改变宽度?
- json - 在 Excel 365 中解析 JSON 而不引用 MSScript 控件 32 位
- python - 当页面是事件时在页面之间移动
- java - 回收器适配器 onClick 项目的问题
- html - CSS 元素选择器