Linq按嵌套集合中的列分组

时间:2016-11-19 01:23:15

标签: c# .net linq ienumerable

IEnumerable<IEnumerable<object>> rows = new List<List<object>
{
  //Columns
  new List<object> { 10, 20, 30, 40, 50 }, 
  new List<object> { 10, 20, 30, 40, 50 },
  new List<object> { 10, 20, 30, 40, 50 },
  new List<object> { 10, 20, 30, 40, 50 } 
}

我基本上想要分组所有的10个,20个,30个,40个,50个。

我想用Linq以最好的方式做到这一点。请注意我的收藏量可以达到2000万或更多。

我能够通过执行以下操作来实现它,但是当我为组集合执行每个操作时,它会让我出现内存异常。

 IEnumerable<IEnumerable<object>> rows = Enumerable.Repeat(new List<object> { 10, 20, 30, 40, 50 }, 20000000);

 var group = rows.SelectMany(x => x.Select((InnerValue, Index) => new { Index, InnerValue })).GroupBy(x => x.Index);

预期结果如下:

var expectedResult = new List<List<object>
{
  new List<object> { 10, 10, 10, 10, 10 }, 
  new List<object> { 20, 20, 20, 20, 20 },
  new List<object> { 30, 30, 30, 30, 30 },
  new List<object> { 40, 40, 40, 40, 40 } 
}

感谢。

1 个答案:

答案 0 :(得分:0)

如果您想使用linq :),可以使用以下查询执行此操作:

    List<List<object>> expectedResult =
        rows.SelectMany(r => r)
        .ToLookup(k => k, v => v)
        .Select(kv => kv.ToList())
        .ToList();