我有一個int整數和一個包含int ID的對象列表。基於另一個集合中的值篩選集合
如果整數數組包含1,2,3等,我只想獲得包含這些ID的對象(所以那些具有1,2,3等)。
這怎麼可能在.NET 3.5中完成?
感謝
我有一個int整數和一個包含int ID的對象列表。基於另一個集合中的值篩選集合
如果整數數組包含1,2,3等,我只想獲得包含這些ID的對象(所以那些具有1,2,3等)。
這怎麼可能在.NET 3.5中完成?
感謝
DaveShaw的answer很好,如果你正在處理小序列。如果您的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));
到the where approach另一種可能是這樣的:
var ints = new[] {1, 2, 3, };
var matches = ints.Intersect(objects.Select(obj => obj.Id));
該項目的對象整數,然後執行相交設置操作。只是一種不同的方法。
這不是返回一個ID集合,而是一組對象嗎? – Henry 2012-03-09 13:15:57
woops。誤解了這個問題。你是對的。 – Foo42 2012-03-09 13:17:22
另外,數組上的.Contains()應該比.Intersect()更有效,因爲它不需要爲結果創建新的Set。 – DaveShaw 2012-03-09 13:21:42