2008-09-01 65 views
15

我有一个List<int>List<customObject>。 customObject类有一个ID属性。我如何才能获得仅包含使用LINQ的ID属性在List<int>中的对象的List<customObject>过滤linq名单的财产价值

编辑:我接受Konrads的答案,因为它更容易/更直观地阅读。

回答

16
var result = from o in objList where intList.Contains(o.ID) select o 
+0

是不是Linq`.Where`方法更简洁? (请参阅下面的答案) – 2013-11-07 13:24:58

6

未经检验的,但它会是这样的:

var matches = from o in objList 
        join i in intList on o.ID equals i 
        select o; 

@Konrad只是测试它,和它的工作 - 我只是在那里我会写“i.ID”,而不是一个错字“一世”。

2

只是为了完整性(也许更容易阅读?),用“里”类似于马特的“加盟”:

var matches = from o in customObjectList 
       from i in intList 
       where o.ID == i 
       select o; 
10

我有过类似的问题,刚才和使用低于解决方案如果已经有对象列表,则可以删除int列表中找不到的所有对象,只留下objList中的匹配项。

objList.RemoveAll(x => !intList.Contains(x.id)); 
0

请注意,使用连接而不是包含列表中的项目数量超过49时不起作用!你会得到错误:Some part of your SQL statement is nested too deeply. Rewrite the query or break it up into smaller queries.

8
using System.Linq; 

objList.Where(x => intList.Contains(x.id));