如何用C# LINQ将Grouped列表转换为Normal列表(禁用循环)
用C# LINQ展平分组对象列表为普通对象列表
场景与类定义
现有以下分组结构的类:
public class Grouped { public int Id { get; set; } public string GroupName { get; set; } public List<Item> Items { get; set; } } public class Item { public string ItemName { get; set; } }
需要转换为的目标类Normal定义如下:
public class Normal { public int Id { get; set; } public string GroupName { get; set; } public string ItemName { get; set; } }
需求
仅使用C# LINQ实现转换,禁止使用foreach或for循环,将Grouped对象列表转换为Normal对象列表,每个Item对应一条Normal记录,继承所属分组的Id和GroupName。
转换后示例结果
| Id | GroupName | ItemName |
|---|---|---|
| 1 | A | X |
| 1 | A | Y |
| 2 | B | Y |
| 3 | C | X |
| 3 | C | Y |
| 3 | C | Z |
解决方案
使用SelectMany方法展平嵌套的Items列表,同时映射每个Item为Normal对象:
// 假设已有Grouped对象列表 List<Grouped> groupedData = GetGroupedData(); List<Normal> result = groupedData .SelectMany(group => group.Items.Select(item => new Normal { Id = group.Id, GroupName = group.GroupName, ItemName = item.ItemName })) .ToList();
说明
SelectMany会遍历每个Grouped对象,将其内部的Items列表展开为单个序列- 对每个
Item,创建对应的Normal对象,填充分组的Id、GroupName以及当前Item的ItemName - 最终得到的是展平后的
Normal对象列表,完全符合需求格式
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

