在 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/