2011-11-19 228 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(); 
} 
相关问题