【问题标题】:Get Result of GroubBy() as List<List<SomeObject>>获取 GroubBy() 的结果为 List<List<SomeObject>>
【发布时间】:2021-03-27 09:45:15
【问题描述】:
class SomeObject
{
     int Value { get; set; }
     string ID { get; set; }
}

var TheList = List<SomeObject> { ... }

var groupedObjects = TheList.GroupBy(o => o.ID);

返回类型为IEnumerable&lt;IGrouping&lt;SomeObject, string, SomeObject&gt;&gt; 在调试“结果视图”中,项目被正确分组。

我怎样才能得到List&lt;List&lt;SomeObject&gt;&gt; 作为回报?

简单的ToList() 显然行不通。

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    这是一个类似的问题,答案很好:How to get values from IGrouping

    你可以试试

    var groupedObjects = TheList.GroupBy(o => o.ID, c => c).SelectMany();
    

    【讨论】:

    • 1) 没有 SelectMany 的无参数版本(所以这不会编译),并且 2) 我不确定这就是他们所追求的:SelectMany(x =&gt; x) 会使分组到一个级别,而 OP 仍然想要两个级别,他们只是希望它们都是列表
    【解决方案2】:

    你需要两个ToList()s:

    TheList.GroupBy(o => o.ID, c => c)
           .Select(g=>g.ToList())
           .ToList();
    

    【讨论】:

    • 尼特:我认为你可以放弃c =&gt; c?虽然授予它是 OP 的问题
    • @canton7 是的,它可以被删除,但它不会改变任何东西,并且保持原始尝试不变(相关更改是添加了ToList()s)
    • 谢谢你们俩。 c 确实是不必要的,但@DStanley 提到它并没有改变结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2020-07-06
    • 2012-05-15
    • 2014-02-28
    • 2021-10-26
    • 1970-01-01
    相关资源
    最近更新 更多