これを正しく行うのに問題があり、LINQでアカウントごとにグループ化したトランザクションのリストがあります。これにより、すべてのアカウントの列挙が可能になり、それぞれにトランザクションの列挙が含まれます。そのリストを取得して、各グループのトランザクションの合計で並べ替えたいのですが、機能していないようです。これは、これまでのところです。
var memberTrans = trans.GroupBy(o => o.ShareAccountId);
var transOrdered = memberTrans.OrderByDescending(o => o.Sum(i => i.TransactionAmount));
アイデアは、.First()を実行して、期間中に最も高い純増加があったアカウントを取得し、.Last()を実行して、最も低い純増加があったアカウントを取得することができます。
私が次のようなデータを持っていると仮定します(簡略化)
- アカウント1:300
- アカウント1:-300
- アカウント2:100
- アカウント3:50
- アカウント2:-20
したがって、最初のグループ化により、次のことがわかります。
アカウント1:
- トラン:300
- トラン:-300
アカウント2:
- トラン:100
- トラン:-20
アカウント3:
- トラン:50
次に、各グループ内のトランザクションのSUMで並べ替えたいので、次のリストを作成します。
アカウント2:
- トラン:100
- トラン:-20
アカウント3:
- トラン:50
アカウント1:
- トラン:300
- トラン:-300
うまくいけば、それは十分に明確です、どんな助けも大いに感謝します!
編集:明確にするためのより多くのコード:
var tranOrder = trans.GroupBy(o => o.ShareAccountId).OrderByDescending(g => g.Sum(t => t.TransactionAmount));
var bigUp = tranOrder.First().First();
var bigDown = tranOrder.Last().First();
report.BiggestMovementUp = tranOrder.First().Sum(o => o.TransactionAmount);
report.BiggestMoverUp =
(bigUp.Member.Title + " " + bigUp.Member.Forename + " " + bigUp.Member.Surname + " - ID " + bigUp.Member.MemberID).Trim();
report.BiggestMovementDown = tranOrder.Last().Sum(o => o.TransactionAmount);
report.BiggestMoverDown =
(bigDown.Member.Title + " " + bigDown.Member.Forename + " " + bigDown.Member.Surname + " - ID " + bigDown.Member.MemberID).Trim();