我有兩個不同類型的對象集合。讓我們稱他們爲ALPHA和BRAVO。每種類型都有一個屬性,即該對象的「ID」。沒有ID在類內複製,因此對於任何給定的ID,最多隻有一個實例是ALPHA和一個實例。我需要做的就是把它們分爲3類:ALPHA不出現BRAVO集合中的ID的LINQ組合查詢
- 實例;
- ID中的實例BRAVO哪些沒有出現在ALPHA集合中;
- 出現在兩個集合中的ID的實例。
在所有3種情況下,我需要從手頭收集的實際對象中進行後續操作。
我知道的#3的情況下,我可以這樣做:
var myCorrelatedItems = myAlphaItems.Join(myBravoItems, alpha => alpha.Id, beta => beta.Id, (inner, outer) => new
{
alpha = inner,
beta = outer
});
我也可以寫代碼,#1和#2案件看起來像
var myUnmatchedAlphas = myAlphaItems.Where(alpha=>!myBravoItems.Any(bravo=>alpha.Id==bravo.Id));
而且對於unMatchedBravos也是如此。不幸的是,這會導致重複收集alpha(可能非常大!)很多次,並且收集bravos(也可能非常大!)很多次。
有什麼辦法統一這些查詢概念,以便最大限度地減少對列表的迭代?這些集合可以有數千個項目。
我覺得對於一個HashSet你需要一個'的IEqualityComparer'而不是'IComparer'。而不是使用GetId方法,我只會執行'a.Id.CompareTo(b.Id)'(因爲使用這個通用比較器,您將接收ABItems而不是對象)。 –
2010-11-04 17:49:24