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

时间:2014-07-07 14:53:20

标签: c# linq list

我有两个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查询的外观如何?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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

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