如何在 ID 匹配时使用 LINQ 对特定字段求和来合并两个列表

How to merge two lists using LINQ Suming a especific field when the id matched

考虑到我有 2 个列表(firstList 和 secondList),它们都具有相同的属性,但具有不同的值。

我需要结果合并两个列表,但它必须考虑到字段 IdALuno 匹配第二个列表的 ID 它应该对 属性 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 来:

  1. IdALuno 分组并对所有 Nota 求和。
  2. 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();

Sample program