在Where LINQ查询中使用Contains()

时间:2013-02-06 21:25:59

标签: c# linq entity-framework list contains

我正在使用这段代码从表中获取所需的行列表:

_userObjectSet = EntityFrameWorkContext.CreateObjectSet<User>();
List<int> selectedUserIDs = Method(); //Returns a specific set of int user IDs...
var results = _userObjectSet.Where(c => selectedUserIDs.Contains(c.ID)).ToList();

这确实有效,因为“结果”只包含ID字段与selectedUserIDs列表中的元素匹配的记录。

问题是,如果我查看Windows任务管理器,LINQ似乎加载了所有表的行,然后将它们过滤掉。这个表中有很多行,很快这个过程的重量超过1GB,我不太喜欢。

我也可以告诉它这样做是因为完成所需的时间。

有没有办法告诉LINQ生成如下的查询:

SELECT * FROM Users WHERE ID IN (34,55,66,77, etc.)

只能返回我正在寻找的确切行并使用更少的内存?

谢谢!

2 个答案:

答案 0 :(得分:0)

尝试加入..我想你可以找到差异......

List<int> selectedUserIDs = Method(); //Returns a specific set of int user IDs...
var results = (from u in _userObjectSet 
               join id in selectedUserIDs on u.Id equals id
               select u);

答案 1 :(得分:-1)

你需要LinqKit这样的东西。具体来说,看一下套件附带的PredicateBuilder,因为我认为你需要它来解决你的问题。