簡體   English   中英

根據另一個集合中的值過濾集合

[英]Filter collection based on values in another collection

我有一個int數組和一個包含int ID的對象列表。

如果int數組包含1,2,3等,我只想獲取包含這些ID的對象(那些有1,2,3等的對象)。

怎么可以在.NET 3.5中完成?

謝謝

如果你處理小序列,DaveShaw的答案很好。 如果您的ID數組變大,更高效的方法是將數組加載到HashSet<T> ,然后執行完全相同的查詢,除了使用set。

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));

這會將對象投影到整數,然后執行“相交集”操作。 只是一種不同的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM