19

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

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

4

6 回答 6

16
var result = from o in objList where intList.Contains(o.ID) select o
于 2008-09-01T11:56:21.190 回答
15
using System.Linq;

objList.Where(x => intList.Contains(x.id));
于 2013-11-04T10:27:48.760 回答
10

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

objList.RemoveAll(x => !intList.Contains(x.id));
于 2009-09-29T11:31:07.200 回答
6

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

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

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

于 2008-09-01T11:51:34.073 回答
2

只是为了完整性(也许它更容易阅读?),使用类似于 Matt 的“join”的“where”:

var matches = from o in customObjectList
              from i in intList
              where o.ID == i
              select o;
于 2008-10-01T18:04:50.597 回答
0

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

于 2011-08-05T20:07:45.930 回答