【发布时间】:2014-05-17 18:46:43
【问题描述】:
我有一个如下所示的 linq 查询。当allStudents 包含大量数据时,它非常慢。我从不同的博客知道Contains 非常慢。谁能给我一个更好的解决方案来提高性能。
var selectedStudents = allStudents.Where(s => !studentsIdList.Contains(s.Id));
这里 allStudents 是一个 IQueryable 并且 studentIdList 是一个列表
【问题讨论】:
-
表中有多少行,studentidlist 有多大,获得了多少命中?
-
Contains本身并不慢。这取决于您使用的集合类型。例如,List<T>上的Contains可能需要与列表中元素数量成正比的时间,而使用HashSet<T>,将需要很少且几乎恒定的时间,无论如何集合中有多少个元素。 -
大约 20k 行,studentIdlist 大约 15k
-
selectedStudents的类型和来源是什么?它是否与数据库相关? -
- 不提供详细信息,如果您提供详细信息,将提供 +
标签: c# linq entity-framework contains