如何使用LINQ将Animals对象列表转换为Groups对象列表?
使用LINQ实现Animals到Groups的转换
需求说明
需要将Animals类型的列表转换为Groups类型的列表:以动物所属的分类为分组依据,每个分组汇总所有属于该分类的动物示例。
输入的Animals列表示例
[ { "example": "cat", "categories": ["group1", "group2", "group3"] }, { "example": "dog", "categories": ["group1", "group3", "group4"] }, { "example": "cow", "categories": ["group1"] } ]
期望输出的Groups列表示例
[ { "category": "group1", "examples": ["cat", "dog", "cow"] }, { "category": "group2", "examples": ["cat"] }, { "category": "group3", "examples": ["cat", "dog"] }, { "category": "group4", "examples": ["dog"] } ]
已定义的C#类
public class Animals { public string Example { get; set; } public List<string> Categories { get; set; } } public class Groups { public string Category { get; set; } public List<string> Examples { get; set; } }
LINQ实现代码
通过SelectMany、GroupBy和Select的组合即可完成转换:
// 假设已有Animals类型的列表实例 List<Animals> animals = /* 你的Animals列表数据 */; List<Groups> groups = animals // 拆分每个动物的分类,生成(分类, 动物示例)的独立条目 .SelectMany(animal => animal.Categories.Select(category => new { Category = category, Example = animal.Example })) // 按分类名称分组 .GroupBy(item => item.Category) // 将分组映射为Groups对象 .Select(group => new Groups { Category = group.Key, Examples = group.Select(g => g.Example).ToList() }) .ToList();
代码解释
- SelectMany:将每个
Animals对象的多个分类拆分为独立条目,让每个分类都和对应的动物示例一一对应,解决一对多的拆分需求。 - GroupBy:以分类名称为键,把同分类下的所有动物示例聚集到同一分组中。
- Select:将每个分组转换为
Groups对象,分组的键作为Category属性,分组内的所有动物示例收集为Examples列表。
内容的提问来源于stack exchange,提问作者user989988
相关产品推荐
相关产品推荐

