你能用LINQ合并多个列表吗?

18

假设我有两个列表:

var list1 = new int[] {1, 2, 3};
var list2 = new string[] {"a", "b", "c"};

是否可以编写一个LINQ语句来生成以下列表:

var result = new []{ 
    new {i = 1, s = "a"},
    new {i = 1, s = "b"},
    new {i = 1, s = "c"},
    new {i = 2, s = "a"},
    new {i = 2, s = "b"},
    new {i = 2, s = "c"},
    new {i = 3, s = "a"},
    new {i = 3, s = "b"},
    new {i = 3, s = "c"}
};

编辑:我忘了提到我不想使用查询语法。无论如何,根据preetsangha的答案,我得到了以下内容:

var result = list1.SelectMany(i =>  list2.Select(s => new {i = i, s = s}));

查询语法有什么问题吗? - John Sheehan
是的,很奇怪你选择了Jon的回复作为答案,而不是preetsangha先回答并提供了另一个版本的相同代码(对Jon表示尊重)。 - Matt Hamilton
2
如果可以两个都选,我会这么做。至于不喜欢查询语法,我只是不喜欢它。它感觉不对,因为它不符合C#的规范,并且并非所有LINQ中的新功能都适用于查询语法,例如ToList()等。 - Cameron MacFarland
你可以使用以下代码从list1和list2中创建一个新的列表:(from l1 in list1 from l2 in list2
select new { i = l1, s = l2}).ToList();
- JDPeckham
2个回答

43
var result = from l1 in list1
             from l2 in list2       
             select new { i = l1, s = l2};

21
var result = list1.SelectMany(l1 => list2, (l1, l2) => new { i = l1, s = l2} );

(这就是编译器将查询表达式编译成的结果 - 它们是相同的。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接