【发布时间】:2022-01-12 12:06:19
【问题描述】:
在 .NET 6 中有一些不错的新 LINQ 扩展方法,例如
var oldest = context.People.MaxBy(p => p.Age);
但是,EF 提供程序似乎还不支持这些功能(当然不是 SQLite 或 SQLServer,都是 6.0.0 版本)。
有谁知道这些提供商计划何时提供这些服务?
【问题讨论】:
-
他们在
Queryable上不可用吗? -
@ErmiyaEskandary 它们在界面上可用,但由提供者实现。
-
SQL 中的等价物是什么? LINQ 被翻译成 SQL ,所以它不能做任何在 SQL 中不可能的事情。
-
LINQ 不会自行运行,它会被转换为 SQL。所有执行与
MaxBy等效的查询的成本都很高。select * from Table1 where field=(select max(field) from Table1)很昂贵,即使field被索引覆盖。如果不是,它非常很贵。使用ROW_NUMBER也很昂贵,但也许只需一次表扫描即可获得结果——前提是索引恰到好处。select top 1 * from Table1 order by field desc也需要排序。 相关对象会发生什么?
标签: sql-server sqlite entity-framework linq .net-6.0