【问题标题】:Can you combine multiple lists with LINQ?您可以将多个列表与 LINQ 结合起来吗?
【发布时间】:2008-11-14 05:20:23
【问题描述】:

假设我有两个列表:

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

【问题讨论】:

  • 查询语法有什么问题?
  • 是的,奇怪的是,当 preetsangha 首先进入并拥有相同代码的另一个版本时,您会选择 Jon 的回复作为答案(尊重 Jon)。
  • 如果我能同时选两个我会的。至于不喜欢查询语法,我就是不喜欢。感觉不对,因为它不适合 C#,而且并非 LINQ 中的所有新东西都可以在查询语法中使用,例如 ToList() 等。
  • 你可以这样做(从 list1 中的 l1 从 list2 中的 l2 选择 new { i = l1, s = l2}).ToList();

标签: c# .net linq


【解决方案1】:
var result = from l1 in list1
             from l2 in list2       
             select new { i = l1, s = l2};

【讨论】:

    【解决方案2】:

    preetsangha 的回答是完全正确的,但如果您不想要查询表达式,那么它是:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 2016-08-14
      • 2011-06-05
      • 1970-01-01
      相关资源
      最近更新 更多