使用linq组合两个列表,并为重复记录添加字段

本文关键字:记录 字段 添加 列表 组合 linq 两个 使用 | 更新日期: 2023-09-27 18:11:52

我有两个Report对象列表

public class Report
{
    public string Status {get; set;}
    public string ContractNumber {get; set;}
    public int Count {get; set;}
}

我有两个对象列表List<Report> listPList<Report> listE

我需要组合这两个列表,并只保留不同的值,但对于重复的,我需要更新Count字段,所以新的列表对象看起来像这样

new Report{
    Status = Status;
    ContractNumber = ContractNumber;
    Count = listP.Report.Count +  listE.Report.Count;
}

如果有重复的清单,请注意状态和合同号是相同的。

linq查询是什么样子的?

非常感谢您的帮助!

使用linq组合两个列表,并为重复记录添加字段

连接两个列表中的所有项目,然后按状态和合同号对项目进行分组。从每个组中创建新的报告对象,其中包含适当的状态和合同号,以及组中所有项目的计数总和:

var list = listP.Concat(listE)
                .GroupBy(r => new { r.Status, r.ContractNumber })
                .Select(g => new Report {
                     Status = g.Key.Status,
                     ContractNumber = g.Key.ContractNumber,
                     Count = g.Sum(r => r.Count)
                });

或查询语法:

var list = from r in listP.Concat(listE)
           group r by new { r.Status, r.ContractNumber } into g
           select new Report {
              Status = g.Key.Status,
              ContractNumber = g.Key.ContractNumber,
              Count = g.Sum(r => r.Count)
           };