[英]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.