如何使用LINQ按Analyte分组聚合对应的Units列表
使用LINQ聚合AnalyteUnits数据
你的需求是将多个AnalyteUnits实例按Analyte字段分组,把同一分析物对应的所有单位收集为集合。以下是具体的LINQ实现方式:
步骤1:准备数据源
假设你已经有了包含所有AnalyteUnits对象的集合,示例代码如下:
class AnalyteUnits { public string Analyte; public string Units; } // 示例数据源 var analyteData = new List<AnalyteUnits> { new AnalyteUnits { Analyte = "Ce", Units = "kg" }, new AnalyteUnits { Analyte = "Fe", Units = "%" }, new AnalyteUnits { Analyte = "Fe", Units = "g" } };
步骤2:用LINQ分组聚合
通过GroupBy按Analyte分组,再用Select转换为你需要的格式:
var groupedResult = analyteData .GroupBy(item => item.Analyte) .Select(group => new { analyte = group.Key, units = group.Select(item => item.Units).ToList() });
步骤3:验证输出
如果要打印出你指定的格式,可以遍历结果:
foreach (var result in groupedResult) { var unitsStr = string.Join(", ", result.units.Select(u => $"\"{u}\"")); Console.WriteLine($"analyte = \"{result.analyte}\", units = {{{unitsStr}}}"); }
输出结果会是:
analyte = "Ce", units = {"kg"} analyte = "Fe", units = {"%", "g"}
可选:使用强类型替代匿名对象
如果需要强类型的结果集,可以定义一个专门的类:
class GroupedAnalyte { public string Analyte { get; set; } public List<string> Units { get; set; } }
然后修改Select部分:
var groupedResult = analyteData .GroupBy(item => item.Analyte) .Select(group => new GroupedAnalyte { Analyte = group.Key, Units = group.Select(item => item.Units).ToList() });
内容的提问来源于stack exchange,提问作者sarsnake
相关产品推荐
相关产品推荐

