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

C# 使用linq组合2个列表,并为重复记录添加字段,c#,linq,list,C#,Linq,List,我有两个报表对象列表 public class Report { public string Status {get; set;} public string ContractNumber {get; set;} public int Count {get; set;} } 我有两个对象列表List listP和List listE 我需要合并这两个列表,并且只保留不同的值,但是对于重复的列表,我需要更新Count字段,因此新的列表对象如下所示 new Report{

我有两个报表对象列表

public class Report
{
    public string Status {get; set;}
    public string ContractNumber {get; set;}
    public int Count {get; set;}
}
我有两个对象列表
List listP
List listE

我需要合并这两个列表,并且只保留不同的值,但是对于重复的列表,我需要更新
Count
字段,因此新的列表对象如下所示

new Report{
    Status = Status;
    ContractNumber = ContractNumber;
    Count = listP.Report.Count +  listE.Report.Count;
}
请注意,如果存在重复项,则两个列表的状态和合同编号相同

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

谢谢你,谢尔盖。是否需要按合同编号和状态分组?我尝试了分组方式,但没有状态,但无法在选择中使用它。我是linq的新手,如果我的问题很奇怪,很抱歉。@Macin,这取决于您如何定义不同的实体。如果只有ContractNumber重要,则按ContractNumber分组。但在这种情况下,您应该定义如何获得聚合状态。它可以是状态的某个最大值,也可以是您将定义的任何内容