将列表的行合并为一行

时间:2017-12-11 12:00:08

标签: c#

我有一个类似于以下的付款类

class Payment
{
    public int ContactId {get; set;}
    public DateTime Date {get; set;}
    public decimal Amount {get; set;}
}

在付款清单中,我想对 ContactId 字段中具有相同值的行的金额字段求和,然后在数据中字段。

以下是一个例子:

List<Payment> payments;
Payment payment;
payment = new Payment
{
    ContactId = 1,
    Date = DateTime.Parse("01/01/2018"),
    Amount = 1m
}
payments.Add(payment);

payment = new Payment
{
    ContactId = 1,
    Date = DateTime.Parse("01/01/2018"),
    Amount = 1m
}
payments.Add(payment);

payment = new Payment
{
    ContactId = 2,
    Date = DateTime.Parse("01/01/2018"),
    Amount = 1m
}
payments.Add(payment);

所以我有一个包含三个元素的列表。

我寻找的解决方案在这种情况下会给我一个包含两行的列表。

第1行:ContactId = 1;日期=“2018年1月1日”;量= 2;

第2行:ContactId = 2;日期=“2018年1月1日”;量= 1;

1 个答案:

答案 0 :(得分:3)

您希望按ContactIdDate进行分组,得到Amount的总和?

最简单的方法是使用LINQ:

IEnumerable<Payment> contactDateGroups = payments
   .GroupBy(x => new { x.ContactId, x.Date.Date })
   .Select(g => new Payment{ 
        ContactId = g.Key.ContactId,
        Date = g.Key.Date,
        Amount = g.Sum(x => x.Amount)
    });