You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建嵌套分组:基于Parent集合生成指定多层分组结构

嵌套分组实现方案

要将IEnumerable<Parent>转换为IEnumerable<IGrouping<string, IGrouping<DateTime?, ChildClass>>>,可以通过Linq的SelectMany和多次GroupBy来实现,具体代码及步骤如下:

实现代码

// 假设你的Parent集合已经初始化
IEnumerable<Parent> parentCollection = // 你的数据源

var nestedGroupResult = parentCollection
    // 展平数据:关联每个ChildClass对应的EmployeeKey
    .SelectMany(parent => parent.ChildClassCollection, (parent, child) => new { parent.EmployeeKey, Child = child })
    // 第一层分组:按EmployeeKey聚合同一员工的所有子项
    .GroupBy(item => item.EmployeeKey)
    // 第二层嵌套分组:将每个员工的子项按SentData分组,再包装为目标类型的IGrouping
    .Select(employeeGroup => 
        employeeGroup.GroupBy(item => item.Child.SentData)
                     .GroupBy(subGroup => employeeGroup.Key, subGroup => subGroup)
                     .First());

步骤拆解

  1. 展平数据:使用SelectMany将每个Parent下的ChildClassCollection拆分为单独的子项,同时保留对应的EmployeeKey,得到一个包含员工标识和子项的扁平集合,为后续分组做准备。
  2. 按员工分组:通过GroupBy(item => item.EmployeeKey)将同一员工的所有子项归为一组,得到IGrouping<string, {EmployeeKey, Child}>类型的集合。
  3. 嵌套按日期分组:对每个员工组内的子项,再次调用GroupBy按SentData字段分组,得到按日期聚合的子组;最后将这些子组按员工Key重新分组并取第一个结果,就得到了IGrouping<string, IGrouping<DateTime?, ChildClass>>类型的嵌套分组,最终集合即为目标类型。

内容的提问来源于stack exchange,提问作者Kamran Shahid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:07:35