.NET 6 带有实体框架的新 LINQ 功能
Posted
技术标签:
【中文标题】.NET 6 带有实体框架的新 LINQ 功能【英文标题】:.NET 6 New LINQ Features with Entity Framework 【发布时间】: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
也需要排序。 相关对象会发生什么?
【参考方案1】:
目前,EF Core 不支持它们(至少 EF Core 团队提供的提供程序不支持),团队正在调查 7.0 中的支持情况。见thisgithub问题。
还有this issue 了解其他新的 LINQ 功能。
【讨论】:
不要期望太多。关键字是reasonable translations.
。数量不多,而且都很贵。然后就是加载相关实体的问题以上是关于.NET 6 带有实体框架的新 LINQ 功能的主要内容,如果未能解决你的问题,请参考以下文章
ADO.NET 实体框架 - 带有实体框架 6 的 Oracle
在带有 Linq 的实体框架中使用 LIKE "%%%"? [复制]