c# - Entity Framework Core 词汇比较

标签 c# linq entity-framework-core

在 SQL 中,很容易做这样的事情:

SELECT * FROM ATable
    WHERE (Column1, Column2) < (10, 23)

我可以用 Entity Framework Core 做类似的事情吗?它会使用适当的 SQL 查询还是会在内存中过滤,这对任何更大的表都是不可用的?

我唯一想到的是明确地编码比较,即使只有两列也是丑陋的。

编辑: 优化不佳的版本,请勿使用。

context.ATable.Where(t => t.Column1 < 10 || t.Column1 == 10 && t.Column2 < 23);

最佳答案

researching a bit more 之后,此行值比较功能在 SQL 标准中,但大多数 RDBMS 从未正确实现它们。所以我不希望它很快在 LINQ 中实现,尤其是在 EF Core 中。

变通办法不是很好。下面是一些逻辑上等效的 LINQ 示例。

// *Do not use.*
// Simplest logic, but the database engines have issues in realising that
// there is actually an implied "t.Column1 <= 10".
ATable.Where(t => t.Column1 < 10 ||
                  t.Column1 == 10 && t.Column2 < 23);

// Markus Winand's style. Confusing, IMO.
ATable.Where(t => t.Column1 <= 10 &&
                  !(t.Column1 == 10 && t.Column2 >= 23));

// My personal favourite.
ATable.Where(t => t.Column1 <= 10 &&
                  (t.Column1 < 10 || t.Column2 < 23));

关于c# - Entity Framework Core 词汇比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48262091/

相关文章:

c# - +ffff 在此 DateTime 格式中代表什么 ddd, d MMM yyyy HH :mm:ss +ffff

c# - Entity Framework 使用 HasOptional 加载外键

asp.net-core - 在 Blazor 中将 Identity 与 AddDbContextFactory 结合使用

c# - 动态加载 DbSet 到 DbContext

c# - 在 C# 中将字符串解析为 DateTime

c# - 架构问题

c# - 如何合理实现类结构

c# - 使用 LINQ 高效配对时间相关记录

c# - 如何使用 Groupby 和 Linq 对 DataTable 中多列的值求和

c# - Entity Framework 核心 .Include() 问题