3

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

_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.)

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

谢谢!

4

2 回答 2

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);
于 2013-02-11T10:47:36.187 回答
-1

为此,您将需要LinqKit之类的东西。具体来说,请查看套件随附的 PredicateBuilder,因为我认为您需要它来解决您的问题。

于 2013-02-06T21:34:37.290 回答