EF - Linq Expression并使用Int列表来获得最佳性能

时间:2012-01-12 14:47:36

标签: performance linq entity-framework list

所以我有一个大约100k项目的列表(表格),我想检索与给定列表匹配的所有值。

我有类似的东西。 Table Sections键不是主键,所以我希望listOfKeys中的每个值都返回几行。

List<int> listOfKeys = new List<int>(){1,3,44};
var allSections = Sections.Where(s => listOfKeys.Contains(s.id));

我不知道它是否有所作为,但一般listOfKeys只会有1至3项。

我正在使用实体框架。

所以我的问题是,这是在linq表达式中包含列表的最佳/最快方式吗? 我假设使用另一个.NET ICollection数据对象并不好。我应该使用联盟吗?

谢谢

2 个答案:

答案 0 :(得分:1)

假设listOfKeys只包含很少的项目和它的本地列表(不是来自数据库),例如&lt; 50,那就没关系。生成的查询基本上是WHERE id in (...)WHERE id = ... OR id = ... ...,数据库引擎可以处理它。

答案 1 :(得分:0)

Join可能效率更高:

var allSections =
    from s in Sections
    join k in listOfKeys on s.id equals k
    select s;

或者,如果您更喜欢扩展方法语法:

var allSections = Sections.Join(listOfKeys, s => s.id, k => k, (s, k) => s);