2014-02-20 64 views
3

首先道歉,如果這是赤裸裸的重複的對象,我搜索了可能產生的結果,但很難找到一個答案/連貫構建我的檢索詞的所有短語。聯盟兩個集合,但只用一個ID匹配

我有一個集合1和對象A的Collection 2

// Object A Structure 
Date 
Type 
Value 

收集1佔地面積日期1日至2日2種類型和系列2涵蓋日期3日至4日爲1種類型:

// Collection 1 
[0] = 1st, TypeA, 3 
[1] = 2nd, TypeA, 3 
[2] = 1st, TypeB, 57 
[3] = 2nd, TypeB, 57 

// Collection 2 
[0] = 3rd, TypeB, 57 
[1] = 4th, TypeB, 58 

我最初的要求是這兩個集組合。這不是個問題:

var result = collection1.Union(collection2); 

不過,我現在想兩個集合,但在類型不收集2存在自Collection 1排除對象合併:

// Result Collection 
[0] = 1st, TypeB, 57 
[1] = 2nd, TypeB, 57 
[2] = 3rd, TypeB, 57 
[3] = 4th, TypeB, 58 

我敢肯定有一個簡單的(希望linq)一個線路解決方案,但我不能讓我的大腦齒輪來弄清楚它是什麼。

最好的(兩行)我走到這一步是:

// Get distinct Types from Collection 2 
var typesToInclude = collection2.GroupBy(c => c.Type).Select(group => group.First().Type); 

var result = collection2.Union(collection1.Where(c => typesToInclude.Contains(c.Type))); 

但是,這感覺很笨重,而不是最佳:(

回答

7

請嘗試以下

var result = collection1 
    .Where(x => collection2.Any(c => c.Type == x.Type)) 
    .Union(collection2); 

本質第一濾波器collection1到具有Typecollection2,然後運行該工會運作的項目

+0

Ahhhhhhhh任何!它甚至不是對我一個新的,只是看不到樹木,不見森林:)非常感謝賈裏德,我更喜歡的順序爲好,看起來比嵌入聯盟內的地方更好。 – thudbutt