LINQ GroupBy并选择其他属性值的列表

kd3sttzy  于 2023-07-31  发布在  其他
关注(0)|答案(2)|浏览(108)

我有这样的对子:

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";


请不要建议字典,我不想在JS方面处理它们。

gblwokeq

gblwokeq1#

首先按Analyte分组,然后您可以为每个组选择所有Units

var condensed = originalList
    .GroupBy(item => item.Analyte)
    .Select(group => new AnalyteUnitPair()
    {
        Analyte = group.Key,
        Unit = string.Join(",", group.Select(item => $"{item.Unit}:{item.Unit}"))
    });

字符串

xdnvmnnf

xdnvmnnf2#

这个怎么样

var listOfPairs = 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"}
};

var analyteUnitsQuery =
    from pair in listOfPairs
    group pair by pair.Analyte into g
    select new AnalyteUnits
    {
        Analyte = g.Key,
        Units = string.Join(',', g.Select(pair => $"{pair.Unit}:{pair.Unit}"))
    };

foreach (var analyteUnits in analyteUnitsQuery)
{
    Console.WriteLine($"Analyte={analyteUnits.Analyte}, Units={analyteUnits.Units}");
}

public class AnalyteUnitPair
{
    public string Analyte { get; set; }
    public string Unit { get; set; }
}

public class AnalyteUnits
{
    public string Analyte { get; set; }
    public string Units { get; set; }
}

字符串

相关问题