如何使用LINQ将两个或多个集合合并到一个集合中

时间:2011-11-19 00:25:01

标签: c# linq join collections

我有三个收藏品

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的字段映射到第四个集合的字段来合并表。 / p>

Psuedo-code,希望澄清我想要解释的内容:

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);

如果可以,我该如何做到这一点?

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

您可以使用Linq Union。我已经伪造了初始化,因为你的例子没有真正的集合,但仍然保留元素的匿名性质,因为我认为这是你想要的。

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();
}