linq:将两个序列投射到第三个结果序列

时间:2012-03-14 22:34:14

标签: c# linq

我有两个序列:

l1 = { "a1", "a2"}

l2 = { "b1", "b2"}

我想返回第三个序列:

l3 = { new A {a = "a1", b = "b1"}, new A {a = "a2", b = "b2"}}}

我如何使用linq这样做?

3 个答案:

答案 0 :(得分:4)

您正在寻找Zip API

var l3 = l1.Zip(l2, (left, right) => new A { a = left, b = right });

注意:直到4.0才将此添加到.Net Framework中。如果你正在使用它,那么编写3.5版本相当容易。

答案 1 :(得分:3)

您正在寻找函数式编程的zip操作,它从两个序列中获取相应的元素,并构建包含匹配对的第三个序列。在C#中,这是使用Enumerable.Zip实现的。您可以使用

获得您要查找的具体结果
Enumerable.Zip(l1, l2, (elem1, elem2) => new A {a = elem1, b = elem2});

答案 2 :(得分:1)

假设您有一个A类,并且两个序列具有相同数量的元素:

var l1 = new [] { "a1", "a2"};
var l2 = new [] { "b1", "b2"};

var l3 = l1.Zip(l2, (x,y) => new { A { a = x, b = y });