我有三个收藏品
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);
如果可以,我该如何做到这一点?
答案 0 :(得分:3)
我认为您正在寻找LINQ Union运算符:http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx
答案 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();
}