我有一个List<int> ListOfIDs
,其中包含一些ID号码。
我有一个List<CustomClass> ListOfObjects
包含一些对象,这些属性反映了他们的ID。
我搜索了一个Linq查询的高低,这个查询允许我从我的List中返回一个子列表,该子列表只包含那些ID包含在List中的对象。
我的尝试没有编译,我似乎无法纠正语法:
List<CustomClass> SubList = ListOfObjects.Where(ListOfIDs.Contains(p => p.ID))
非常感谢。
答案 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();