通过字段展平来复制集合中的项目

时间:2012-04-16 08:14:34

标签: c# .net linq flatten

我有一个集合:
[A {'a'=> '1','b'=> ['1','2']}
  B {'a'=> '2','b'=> ['1','2','3']}]

我正在寻找一个函数来“复制”此集合中的项目以产生下一个结果:
[A1 {'a'=> '1','b'=> '1'}
A2 {'a'=> '1','b'=> '2'}
B1 {'a'=> '2','b'=> '1'}
B2 {'a'=> '2','b'=> '2'}
B3 {'a'=> '2','b'=> '3'}]

我怎么能得到这样的结果?

1 个答案:

答案 0 :(得分:1)

您对A / B类的定义不是很清楚。我想你的班级看起来像是:

class Data
{
    public int a;
    public int[] b;
}

准备如下数据:

var A = new Data { a = 1, b = new[] { 1, 2, } };
var B = new Data { a = 2, b = new[] { 1, 2, 3 } };
List<Data> original = new List<Data> { A, B };

使用.SelectMany展平数据:

var result = original.SelectMany(item => 
                          item.b.Select(x => 
                             new { a = item.a, b = x }))
                     .ToList();

请忽略代码中的一些不良编程习惯(如公共字段),并随意建议最后一个linq查询的编码风格。