gpt4 book ai didi

c# - LINQ 按 List 分组并返回结果

转载 作者:太空宇宙 更新时间:2023-11-03 18:55:50 25 4
gpt4 key购买 nike

我有三个 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}
};

我想要最终结果(基于 Empid 的所有评级的总和)

Final={Empid=1,Empname="John",Rating=3.99}
{Empid=2,Empname="Aarya",Rating=4.8}
{Empid=3,Empname="Sansa",Rating=3.2}

如何通过使用 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() });

或者在查询语法中:

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()
};

基于 Empid 的所有评级的总和 - 请注意,如果 id 和名称相关,则最简单的方法是将它们按上例中的两个进行分组。否则,按 id 分组并为每个组检索 .First().Empname

关于c# - LINQ 按 List<results> 分组并返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45657351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com