【问题标题】:LINQ - How to merge two lists and sum specific field when the ids are matchedLINQ - 如何在 id 匹配时合并两个列表并对特定字段求和
【发布时间】:2022-11-05 09:22:29
【问题描述】:

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

我需要合并两个列表的结果,但它必须考虑字段IdALunosecondList 的ID 匹配的情况,并且它应该对属性Nota 的值求和。

我在这里看到了几个例子,在这种特定情况下没有任何效果。

这是我的预期结果:

  • 所有列表中的idAluno 必须出现在finallist
  • idAluno 匹配两个列表时,它应该对字段Nota 求和
IdALuno Nota
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}");
            }
        }
    }

【问题讨论】:

    标签: c# list linq merge


    【解决方案1】:

    您可以使用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

    【讨论】:

    • 谢谢Yong,这正是我所期待的
    • Yong,我还有一个,稍微复杂一点,因为它有子列表。我试图用这个例子来应用这个例子。如果你能在另一个方面帮助我,我将不胜感激。 stackoverflow.com/questions/72142242/…
    猜你喜欢
    • 2021-01-10
    • 2022-11-24
    • 2014-01-26
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 2018-05-22
    相关资源
    最近更新 更多