如何解决在Entity Framework Core中,如何查询具有数据库级别条件而非本地LINQ的联接表上的数据?
作为一个小型.NET Core 3项目的一部分,我试图使用基于Entity Framework的数据模型,但遇到一些与联接表查询有关的麻烦。
在单个表中查找与条件匹配的数据时,该模型易于理解
List<Element> listOfElements = context.Elements.Where(predicate).ToList();
但是,当此查询需要联接表时,我不确定如何有效地执行它。经过一番调查后,似乎可以使用include(和theninclude)方法,但是我的印象是,include之后的Where子句不是在数据库级别执行的,而是在检索所有数据之后执行的。这可能适用于小型数据集,但是对于具有数百万行的生产系统,我认为这不是一个好主意。
List<Element> listOfElements = context.Elements.Include(x => x.SubElement).
Where(predicate).ToList();
我已经看到了一些使用EF +库的示例,但是我正在寻找使用标称EF Core的解决方案。有什么干净/优雅的方法吗?
谢谢。
解决方法
在某些情况下,来自DB的数据正在填充:
- 推迟执行查询:这是您尝试访问查询结果的时间,例如,在
foreach
语句中。 - 立即查询执行:当您调用
ToList()
(或转换为其他集合,例如ToArray()
)时。
我认为答案是您的问题:
...但是我有一个印象,include之后的Where子句不是在数据库级别执行的,而是在检索到所有数据之后的。
您的假设是错误的,因为您在最后而不是在ToList()
方法之前调用Where
。
有关更多信息,请同时检查here。
我还提出了另一条建议:在执行查询时,请确保在数据库级别执行的确切操作是SQL Server Profiler。
希望这会有所帮助))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。