LINQ group by List <results>并返回结果

kir*_*nsr 1 c# linq

我有三个 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,但我不能.

Gil*_*een 6

使用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