在Where LINQ查询中使用Contains()

本文关键字:Contains Where LINQ 查询 | 更新日期: 2023-09-27 17:57:56

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

_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();

这确实有效,因为"results"只包含ID字段与selectedUserID列表中的元素匹配的记录。

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

我也可以看出,它之所以这么做,是因为它需要时间来完成。

有没有任何方法可以告诉LINQ生成一个看起来像的查询

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

它只会返回我正在查找的确切行,并且使用更少的内存?

谢谢!

在Where LINQ查询中使用Contains()

尝试加入。。我想你可以找到不同。。。

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);

您需要像LinqKit这样的东西。具体来说,看看工具包附带的PredicateBuilder,因为我认为您需要它来解决问题。