【发布时间】:2015-09-23 17:02:44
【问题描述】:
我想使用特定 ID 查询项目。例如:
var ids = new List<int> { 1, 3, 5 };
var items = context.Items.Where(item => ids.Contains(item.ID)).ToList();
问题:
- 这是否会使用 SQL
IN运算符生成单个查询? - 这段代码在性能方面可以吗?
- 有没有更好的方法?
我正在使用带有 Microsoft SQL Server 的 Entity Framework 6。
【问题讨论】:
-
是的,EF6 支持 Contains() 并将被翻译为 IN。我认为没有比这更高效的方法了。
-
视情况而定。如果此列表也来自数据库,那么处理它的最佳方法是 SQL 中的连接语句而不是 IN,这可以使用 EF 中的几种不同技术来完成(.Any 就是其中之一)。如果列表很小,那么性能通常不是问题,如果列表很长,则可能会导致性能问题。
-
我想说没有更简单的方法可以做到这一点。性能可能会更差,具体取决于您的数据库、查询的复杂性(连接、分组等)以及本地列表的大小。我会通过尽可能设计数据库来避免使用本地列表。如果使用本地列表,则应具有较小的大小。
标签: c# .net entity-framework linq entity-framework-6