如何在 ID 匹配时使用 LINQ 对特定字段求和来合并两个列表
How to merge two lists using LINQ Suming a especific field when the id matched
考虑到我有 2 个列表(firstList 和 secondList),它们都具有相同的属性,但具有不同的值。
我需要结果合并两个列表,但它必须考虑到字段 IdALuno 匹配第二个列表的 ID 它应该对 属性 Nota 的值求和。
我似乎在这里举了几个例子,但在这种特定情况下没有任何效果。
这是我的预期结果:
- 所有榜单的idAluno必须出现在决赛名单中;
- 当 idAluno 匹配两个列表时,它应该对字段 Nota 求和;
IdALuno |注意
1 | 9
2 | 4
3 | 8
4 | 2
5 | 3
6 | 3
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp1
{
public class Program
{
class Semestre
{
public int Nota { get; set; }
public int IdALuno { get; set; }
}
public static void Main()
{
List<Semestre> firstList = new List<Semestre>();
firstList.Add(new Semestre { IdALuno = 1, Nota = 5 });
firstList.Add(new Semestre { IdALuno = 2, Nota = 4 });
firstList.Add(new Semestre { IdALuno = 3, Nota = 3 });
firstList.Add(new Semestre { IdALuno = 5, Nota = 3 });
List<Semestre> secondList = new List<Semestre>();
secondList.Add(new Semestre { IdALuno = 1, Nota = 4 });
secondList.Add(new Semestre { IdALuno = 3, Nota = 5 });
secondList.Add(new Semestre { IdALuno = 4, Nota = 2 });
secondList.Add(new Semestre { IdALuno = 6, Nota = 3 });
foreach (var item in firstList)
{
Console.WriteLine($"idALuno: {item.IdALuno} / Nota: {item.Nota}");
}
}
}
您可以使用 System.Linq
来:
- 按
IdALuno
分组并对所有 Nota
求和。
- 按
IdALuno
排序。
using System.Linq;
List<Semestre> result = new List<Semestre>();
result.AddRange(semestre1);
result.AddRange(semestre2);
result = result.GroupBy(x => x.IdALuno)
.Select(x => new Semestre
{
IdALuno = x.Key,
Nota = x.Sum(y => y.Nota)
})
.OrderBy(x => x.IdALuno)
.ToList();
考虑到我有 2 个列表(firstList 和 secondList),它们都具有相同的属性,但具有不同的值。
我需要结果合并两个列表,但它必须考虑到字段 IdALuno 匹配第二个列表的 ID 它应该对 属性 Nota 的值求和。
我似乎在这里举了几个例子,但在这种特定情况下没有任何效果。
这是我的预期结果:
- 所有榜单的idAluno必须出现在决赛名单中;
- 当 idAluno 匹配两个列表时,它应该对字段 Nota 求和;
IdALuno |注意
1 | 9
2 | 4
3 | 8
4 | 2
5 | 3
6 | 3
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp1
{
public class Program
{
class Semestre
{
public int Nota { get; set; }
public int IdALuno { get; set; }
}
public static void Main()
{
List<Semestre> firstList = new List<Semestre>();
firstList.Add(new Semestre { IdALuno = 1, Nota = 5 });
firstList.Add(new Semestre { IdALuno = 2, Nota = 4 });
firstList.Add(new Semestre { IdALuno = 3, Nota = 3 });
firstList.Add(new Semestre { IdALuno = 5, Nota = 3 });
List<Semestre> secondList = new List<Semestre>();
secondList.Add(new Semestre { IdALuno = 1, Nota = 4 });
secondList.Add(new Semestre { IdALuno = 3, Nota = 5 });
secondList.Add(new Semestre { IdALuno = 4, Nota = 2 });
secondList.Add(new Semestre { IdALuno = 6, Nota = 3 });
foreach (var item in firstList)
{
Console.WriteLine($"idALuno: {item.IdALuno} / Nota: {item.Nota}");
}
}
}
您可以使用 System.Linq
来:
- 按
IdALuno
分组并对所有Nota
求和。 - 按
IdALuno
排序。
using System.Linq;
List<Semestre> result = new List<Semestre>();
result.AddRange(semestre1);
result.AddRange(semestre2);
result = result.GroupBy(x => x.IdALuno)
.Select(x => new Semestre
{
IdALuno = x.Key,
Nota = x.Sum(y => y.Nota)
})
.OrderBy(x => x.IdALuno)
.ToList();