繁体   English   中英

在 Entity Framework Core 中,如何在 DB 级别(不是本地 LINQ)条件下查询连接表上的数据?

[英]In Entity Framework Core, how can I query data on joined tables with a condition at DB level (not local LINQ)?

作为小型 .NET Core 3 项目的一部分,我正在尝试使用基于实体框架的数据 model,但我遇到了一些与连接表查询相关的问题。

在单表中查找符合条件的数据时,model很好理解

List<Element> listOfElements = context.Elements.Where(predicate).ToList();

但是,当此查询需要连接表时,我不确定如何有效地执行此操作。 经过一些调查,include(和 theninclude)方法似乎是通往 go 的途径,但我的印象是 include 之后的 Where 子句不是在数据库级别执行的,而是在检索到所有数据之后执行的。 这可能适用于小型数据集,但我认为这对于具有数百万行的生产系统来说不是一个好主意。

List<Element> listOfElements = context.Elements.Include(x => x.SubElement).
    Where(predicate).ToList();

我看过一些使用 EF+ 库的示例,但我正在寻找使用标称 EF Core 的解决方案。 有什么干净/优雅的方法吗?

谢谢你。

填充来自数据库的数据时有几种情况:

  • 延迟查询执行:这是当您尝试访问查询结果时,例如,在foreach语句中。
  • 立即执行查询:当您调用ToList() (或转换为其他 collections,如ToArray() )时执行此操作。

我认为你的问题的答案是:

...但我的印象是,include 之后的 Where 子句不是在数据库级别执行的,而是在检索到所有数据之后执行的。

是你的假设是错误的,因为你在最后调用ToList() ,而不是在Where方法之前。

欲了解更多信息,请查看此处


我还有另一个建议:要确定在数据库级别执行的是什么,请在执行查询时运行SQL Server Profiler

希望这会有所帮助))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM