【问题标题】:.NET 6 New LINQ Features with Entity Framework.NET 6 带有实体框架的新 LINQ 功能
【发布时间】: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


【解决方案1】:

目前,EF Core 不支持它们(至少 EF Core 团队提供的提供程序不支持),团队正在调查 7.0 中的支持情况。见thisgithub问题。

还有this issue 了解其他新的 LINQ 功能。

【讨论】:

  • 不要期望太多。关键字是reasonable translations.。数量不多,而且都很贵。然后就是加载相关实体的问题
猜你喜欢
  • 2015-12-26
  • 2014-01-30
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
相关资源
最近更新 更多