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

_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 Task Manager,LINQ似乎会加载表的所有行,然后将其过滤掉。该表中有很多行,很快进程的权重就超过1GB,我真的不喜欢。

我还可以说,这样做是因为需要花费时间。

有什么方法可以告诉LINQ生成如下查询:

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


哪个只会返回我要查找的确切行并使用更少的内存?

谢谢!

最佳答案

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

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

09-06 03:31