所以我有一个大约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
数据对象并不好。我应该使用联盟吗?
谢谢
答案 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);