0
リストコレクションの1つの列を別の列に基づいて合計したいとします。2番目の列に基づいてリストの1つの列を合計
このクラスは結果がこの
Date Payment
2015-09-09 700
2017-01-03 450
コードのようにする必要があり
Date Payment
2015-09-09 500
2015-09-09 200
2017-01-03 150
2017-01-03 300
どのように見えるかです:私は匿名型は、それゆえ私作成する必要はありません
var result = from e in scheduleDetails
let k = new
{
Date = e.ActualDueDate
}
group e by k into t
select new
{
Date = t.Key.Date,
Payment = t.Sum(e => e.EscrowPayment)
};
List<ScheduleDetails> temp = result.Select(t => new ScheduleDetails(t.Date, t.Payment)).ToList();
元のオブジェクトにマップします。このために、コンストラクタを作成しなければなりませんでした。
public ScheduleDetails(DateTime? date, decimal? payment)
{
this.ActualDueDate = date;
this.EscrowPayment = payment;
}
質問:
- これは、これを達成するための最良の方法ですか?
var temp = scheduleDetails.GroupBy(sd => sd.ActualDueDate) .Select(g => new ScheduleDetails(g.Key, g.Sum(sd => sd.EscrowPayment))) .ToList();
また
ScheduleDetails
クラスは、それはだのために公共のセッターを持っている場合:私は、結果のオブジェクトが唯一
入力が、今では10ありますが、 'ActualDueDate'と' EscrowPayment'は、すべてのレコードのためにnullで、40行を持っていました。 – Shaggy
@Shaggyそれは不可能です。 ActualDueDateはグループ化に使用されます。グループが10つある場合、ActualDueDateには10個の異なる値が設定されています。 –
[GroupBy](https://msdn.microsoft.com/fr-fr/library/bb549393(v=vs.110).aspx)にはあなたが直接 '選択 'できる拡張機能を持っています。これは '.GroupBy(sd => sd.ActualDueDate、(k、g)=>新しいScheduleDetails(k、g.Sum(sd => sd.EscrowPayment)))'と短縮できます。 –