仅返回列表C#中包含的值

时间:2012-10-23 17:01:03

标签: c# .net linq list

我有一个List<int> ListOfIDs,其中包含一些ID号码。

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

我搜索了一个Linq查询的高低,这个查询允许我从我的List中返回一个子列表,该子列表只包含那些ID包含在List中的对象。

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

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

非常感谢。

4 个答案:

答案 0 :(得分:5)

我想你想这样做?

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

答案 1 :(得分:3)

我认为这就是你所需要的:

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

不要忘记最后致电ToList()

同时考虑将HashSet用于ListOfIDs,因为Contains操作的复杂性仅为O(1)。但是,这取决于你拥有多少数据。

答案 2 :(得分: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();

答案 3 :(得分:0)

尝试使用这段代码片段:

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