2

我有一个List<int> ListOfIDs包含一些 ID 的数字。

我有一个List<CustomClass> ListOfObjects包含一些对象,这些属性反映了它们的 ID。

我在上下搜索了一个 Linq 查询,该查询将允许我从我的列表中返回一个子列表,该列表仅包含那些 ID 包含在列表中的对象。

我的尝试没有编译,我似乎无法更正语法:

List<CustomClass> SubList = ListOfObjects.Where(ListOfIDs.Contains(p => p.ID))

非常感谢。

4

4 回答 4

5

我想你想这样做吗?

List<CustomClass> SubList = ListOfObjects
        .Where(obj => ListOfIDs.Contains(obj.ID))
        .ToList();
于 2012-10-23T17:02:53.103 回答
3

我认为这是你需要的:

List<CustomClass> SubList = ListOfObjects.Where(p => ListOfIDs.Contains(p.ID)).ToList();

最后别忘了打电话ToList()

也可以考虑使用HashSetfor ListOfIDs,因为Contains操作的复杂度刚刚好O(1)。但是,这取决于您拥有多少数据。

于 2012-10-23T17:07:51.713 回答
2

这是您要执行的操作的正确语法:

... ListOfObjects.Where(p => ListOfIDs.Contains(p.ID)).ToList();

尽管这可能比以下Where(Contains)方法更快:

var sublist = (
    from obj in ListOfObjects
    join id in ListOfIDs on id equals obj.ID
    select obj ).ToList();
于 2012-10-23T17:13:40.770 回答
0

尝试使用这段代码片段:

List<CustomClass> SubList = ListOfObjects.Where(o => ListOfIDs.Contains(o.ID))
                                .ToList();
于 2012-10-23T17:03:34.350 回答