asp.net C#中对象列表和聚合的重复项

bybem2ql  于 2022-11-26  发布在  .NET
关注(0)|答案(1)|浏览(129)

我有一个3行的列表,在一定的条件下将它们相互比较,检查它们是否匹配。如果它们匹配,需要聚合内部列表的总和。
下面是我拥有的列表。需要检查Property1、Property2和Property3(在InnerList中)的值是否相同。如果相同,则需要在内部列表中为特定的Property3值添加百分比列

{
List:[
{
Property1: "Apple",
Property2: "Fruit",
    InnerList:[{Property3 : 100,Percentage: 50.00}]
},
{
Property1: "Apple",
Property2: "Fruit",
    InnerList:[{Property3 : 100,Percentage: 50.00},
               {Property3 : 50,Percentage: 50.00}]
},
{
Property1: "Mango",
Property2: "Fruit",
    InnerList:[{Property3 : 75,Percentage: 50.00}]
}
]}

已尝试使用Distinct(),但不起作用。和还尝试了以下查询,该查询用于添加Property3的值,但不确定如何向内部列表添加条件并获得以下结果。
第一次

sdnqo3pr

sdnqo3pr1#

可以使用GroupByProperty1Property2进行分组,然后使用SelectMany展开内部列表。然后可以再次使用GroupByProperty3进行分组,并对Percentage值求和。

var result = list
    .GroupBy(x => new { x.Property1, x.Property2 })
    .Select(g => new
    {
        g.Key.Property1,
        g.Key.Property2,
        InnerList = g.SelectMany(x => x.InnerList)
            .GroupBy(x => x.Property3)
            .Select(g2 => new InnerList
            {
                Property3 = g2.Key,
                Percentage = g2.Sum(x => x.Percentage)
            })
    });

相关问题