根据属性值过滤linq列表

时间:2020-03-05 18:45:56  来源:igfitidea点击:

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

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

解决方案

回答

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

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

@Konrad刚刚测试了它,它的确起作用了,我只是在输入" i.ID"而不是" i"的地方输入了错字。

回答

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

回答

仅出于完整性考虑(也许更容易阅读?),使用类似于Matt的" join"的" where":

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

回答

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

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