我有三个 List<Results>
var list1 = new List<Results> {
new Results{ Empid = 1,Empname = "John",Rating = 1.33},
new Results{ Empid = 2,Empname = "Aarya",Rating = 1.6},
new Results{ Empid = 3,Empname = "Sansa",Rating = 1.6}
};
var list2 = new List<Results> {
new Results{ Empid = 1,Empname = "John",Rating = 2.33},
new Results{ Empid = 2,Empname = "Aarya",Rating = 2.6},
new Results{ Empid = 3,Empname = "Sansa",Rating = 1.6}
};
var list3 = new List<Results> {
new Results{ Empid = 1,Empname = "John",Rating = 0.33},
new Results{ Empid = 2,Empname = "Aarya",Rating = 0.6}
};
Run Code Online (Sandbox Code Playgroud)
我想要最终结果(基于Empid的所有评级的总和)
Final={Empid=1,Empname="John",Rating=3.99}
{Empid=2,Empname="Aarya",Rating=4.8}
{Empid=3,Empname="Sansa",Rating=3.2}
Run Code Online (Sandbox Code Playgroud)
如何通过使用Linq实现这一点,我是LinQ的新手我正在尝试使用GroupBy,但我不能.
使用Concat合并的名单,然后由正常组:
var result = list1.Concat(list2).Concat(list3)
.GroupBy(item => new { item.Empid, item.Empname }, item => item.Rating)
.Select(g => new {
Id = g.Key.Empid,
Name = g.Key.Empname,
Rating = g.Sum() });
Run Code Online (Sandbox Code Playgroud)
或者在查询语法中:
var result = from item in list1.Concat(list2).Concat(list3)
group item.Rating by new { item.Empid, item.Empname } into g
select new {
Id = g.Key.Empid,
Name = g.Key.Empname,
Rating = g.Sum()
};
Run Code Online (Sandbox Code Playgroud)
基于的所有评级的总和Empid - 请注意,如果id和名称相关,则最简单的方法是将它们中的两个分组,如上例所示.否则,按ID分组并检索每个组.First().Empname