[英]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.