簡體   English   中英

列出按項目區分的c#並匯總其他項目

[英]List c# distinct by item and sum other items

想象一個對象列表:

public class Foo
{
    public string Name {get; set;}
    public int Total {get; set;}
}

現在,我的列表包含3個對象:

new Foo {Name="object", Total=3};
new Foo {Name="object", Total=7};
new Foo {Name="object", Total=5};

如何區分名稱和總和? 即列表將只有一個對象:

new Foo {Name="object", Total=15};

提前致謝!

你可以這樣做:

var newTotalList = yourList.GroupBy(x => x.Name)
    .Select(x => new
        {
            Name = x.Key,
            Total = x.Sum(y => y.Total)
        })
    .ToList();

簡而言之,此代碼的作用是先按名稱對元素進行分組,然后對組內所有元素的“總計”字段求和。

您應該可以使用分組。

var groupedList = (from ol in objectList

                    group ol by ol.Name
                        into grp
                        select new foo
                        {
                            Name = grp.Key,
                            Total= grp.Sum(ex => ex.Total),
                            City = grp.Select(ex => ex.City).FirstOrDefault(),
                            Country = grp.Select(ex => ex.Country ).FirstOrDefault(),
                            Phone = grp.Select(ex => ex.Phone).FirstOrDefault()
                        }
    ).ToList();

嘗試這個:

List<Object> list = ... // make a list somehow
var totalsPerName = list
    .GroupBy(o => o.Name)
    .Select(group => new Object { Name = group.Key, Total = group.Sum(o => o.Total) })

您可以按Name分組,然后按Total

var l = new List<Object>
{
    new Object {Name="object", Total=3},
    new Object {Name="object", Total=7},
    new Object {Name="object", Total=5}
};

var result = l.GroupBy(o => o.Name)
              .Select (grp => new Object 
                            { 
                                Name = grp.Key, 
                                Total = grp.Sum(o => o.Total)
                            });

現在的result是:

在此處輸入圖片說明

按名稱對元素進行分組,然后為每個組選擇一個新對象,該對象的名稱是該組的名稱值分組依據,而Total是該組中所有Total的總和:

var groupdObject =list
    .GroupBy(o =>o.Name)
    .Select(g => 
       new 
       {
         Name = g.Key, 
         Total = g.Sum(o=>o.Total)
       });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM