过滤属性值上的linq列表

时间:2008-09-01 11:49:08

标签: .net linq linq-to-objects

我有List<int>List<customObject>。 customObject类具有ID属性。如何使用LINQ获取List<customObject>仅包含ID属性在List<int>中的对象?

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

6 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:12)

using System.Linq;

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

答案 2 :(得分:10)

我刚才遇到了类似的问题并使用了以下解决方案。如果您已经拥有了对象列表,则可以删除int列表中未找到的所有对象,只留下objList中的匹配项。

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

答案 3 :(得分:6)

未经测试,但它会是这样的:

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

@Konrad只是测试了它,它确实有效 - 我只是写了一个错字,我写的是“i.ID”而不是“i”。

答案 4 :(得分:2)

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

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

答案 5 :(得分:0)

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