我有一个整数数组和一个包含整数ID的对象列表。
如果整数数组包含1、2、3等,我只想获取包含这些ID的对象(即包含1、2、3等)。
在.NET 3.5中应该如何实现?
谢谢
如果整数数组包含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));
这个项目将对象投射到整数,然后执行交集操作。只是一种不同的方法。