根据另一个集合中的值筛选集合
本文关键字:集合 筛选 另一个 | 更新日期: 2023-09-27 18:27:11
我有一个int数组和一个包含int ID的对象列表。
如果int数组包含1,2、3等,我只想得到包含这些ID的对象(因此,那些包含1,2,3等的对象)。
在.NET 3.5中如何做到这一点?
感谢
DaveShaw的答案在处理小序列时很好。如果您的ID数组变大,一种更高性能的方法是将数组加载到HashSet<T>
中,然后执行完全相同的查询,只是使用集合。
var hashset = new HashSet<int>(ints);
var matches = objects.Where(obj => hashset.Contains(obj.Id));
对于这个和其他更复杂的场景,您还应该了解Enumerable.Join
,它基于键匹配两个序列并产生所需的结果。
var matches = from obj in objects
join id in ints
on obj.Id equals id
select obj;
// var matches = objects.Join(ints, obj => obj.Id, id => id, (obj, id) => obj);
假设objects
是具有Id
属性的类的实例列表,则可以这样做。
var ints = new[] {1, 2, 3, };
var matches = objects.Where(obj => ints.Contains(obj.Id));
where方法的替代方法可能是这样的:
var ints = new[] {1, 2, 3, };
var matches = ints.Intersect(objects.Select( obj => obj.Id));
这会将对象投影到int,然后执行"相交集"操作。只是一种不同的方法。