使用LINQ GroupBy将AnalyteUnitPair列表转换为AnalyteUnits列表
用LINQ GroupBy实现AnalyteUnitPair到AnalyteUnits的转换
现有定义与数据
源类定义
public class AnalyteUnitPair { public string Analyte { get; set; } public string Unit { get; set; } }
源数据实例
Analyte ="Ce", Unit="g" Analyte ="Ce", Unit="%" Analyte ="Ce", Unit="ppm" Analyte ="Dy", Unit="kg" Analyte ="Dy", Unit="%" Analyte ="Dy", Unit="ppm"
目标定义与转换要求
目标类定义
public class AnalyteUnits { public string Analyte { get; set; } public string Units { get; set; } }
转换后实例格式
Analyte="Ce", Units="g:g,%:%,ppm:ppm"; Analyte="Dy", Units="kg:kg,%:%,ppm:ppm";
要求使用LINQ的GroupBy方法实现,不采用Dictionary方案。
实现代码
// 初始化源数据列表 List<AnalyteUnitPair> analyteUnitPairs = new List<AnalyteUnitPair> { new AnalyteUnitPair { Analyte = "Ce", Unit = "g" }, new AnalyteUnitPair { Analyte = "Ce", Unit = "%" }, new AnalyteUnitPair { Analyte = "Ce", Unit = "ppm" }, new AnalyteUnitPair { Analyte = "Dy", Unit = "kg" }, new AnalyteUnitPair { Analyte = "Dy", Unit = "%" }, new AnalyteUnitPair { Analyte = "Dy", Unit = "ppm" } }; // 通过GroupBy完成转换 List<AnalyteUnits> analyteUnitsList = analyteUnitPairs .GroupBy(pair => pair.Analyte) .Select(group => new AnalyteUnits { Analyte = group.Key, Units = string.Join(",", group.Select(unitPair => $"{unitPair.Unit}:{unitPair.Unit}")) }) .ToList();
代码说明
- 调用
GroupBy按Analyte字段分组,将同元素的项聚合到同一分组中 - 对每个分组,先将组内的
Unit转换为Unit:Unit格式,再用string.Join拼接成逗号分隔的字符串,赋值给Units属性 - 最后将分组结果映射为
AnalyteUnits实例并转为列表
内容的提问来源于stack exchange,提问作者sarsnake
相关产品推荐
相关产品推荐

