2011-11-19 80 views
3

我有三個集合如何使用LINQ到兩個或多個集合合併成一個集

var col1 = new {Name1 = "Frank", ID1 = 123, ABC = "abc"}; 
var col2 = new {Name2 = "Harry", ID2 = 456, XYZ = "xyz"}; 
var col3 = new {Name3 = "Bob"}; 

我想創建第四集合,帶來這三個集合在一起。

使用三個集合爲例,我想第四集合「看起來」像這樣:

+===================+ 
| FirstName | Ident | 
+===================+ 
| Frank  | 123 | 
+-------------------+ 
| Harry  | 456 | 
+-------------------+ 
| Bob  |  | 
+-------------------+ 

我甚至不知道這是否是可能的,但我試圖找出如果我可以使用LINQ通過將col1,col2和col3的字段映射到第四個集合的字段來合併這些表。

僞代碼,希望澄清什麼,我試圖解釋:

var col4 = from c1 in col1, c2 in col2, c3 in col3 
    select new {FirstName = (c1.Name1, c2.Name2, c3.Name3), Ident = (c1.ID1, c2.ID2); 

如果這是可能的,我怎麼能做到這一點?

+3

col1,col2&col3不是集合,只是具有3(1)屬性的匿名對象。 –

+0

糟糕...下次我在我的電腦前編輯我的問題。在此之前,我的意思是我的收藏品具有我在問題中所描述的結構 – Jed

回答

2

您可以使用LINQ聯盟。我僞裝了初始化,因爲你的例子並沒有真正的集合,但仍然保留了元素的匿名性,因爲我認爲這是你的意圖。

static void Main(string[] args) { 
    var dummys = new List<int>(); dummys.Add(1); 
    var col1 = from dummy in dummys 
       select new { Name1 = "Frank", ID1 = 123, ABC = "abc" }; 
    var col2 = from dummy in dummys 
       select new { Name2 = "Harry", ID2 = 456, XYZ = "xyz" }; 
    var col3 = from dummy in dummys 
       select new { Name3 = "Bob" }; 

    var col4 = col1.Select(c=> new { FirstName=c.Name1, Ident=new Nullable<int>(c.ID1)}) 
     .Union(col2.Select(c=> new { FirstName=c.Name2, Ident=new Nullable<int>(c.ID2)})) 
     .Union(col3.Select(c=> new { FirstName=c.Name3, Ident=new Nullable<int>()})); 

    foreach (var c in col4) { 
     Console.WriteLine(c); 
    } 
    Console.ReadKey(); 
} 
相關問題