我有一个类似于以下的付款类
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;
答案 0 :(得分:3)
您希望按ContactId
和Date
进行分组,得到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)
});