以下の処理をおこなう為、以下のコードを作成しました。
・日付ごとにDepositの合計を求める(ただし、Idが1と2の場合は除外)
・Idが1と2以外の場合、Idを0にする
c#
1public class Transaction 2{ 3 public int Id { get; set; } 4 5 public DateTime Date { get; set; } 6 7 public int Deposit { get; set; } 8} 9 10public static void Run() 11{ 12 var transactions = new List<Transaction> 13 { 14 new Transaction { Id = 1, Date = new DateTime(2017, 1, 1), Deposit = 11 }, 15 new Transaction { Id = 2, Date = new DateTime(2017, 2, 1), Deposit = 12 }, 16 new Transaction { Id = 3, Date = new DateTime(2017, 3, 1), Deposit = 13 }, 17 new Transaction { Id = 4, Date = new DateTime(2017, 4, 1), Deposit = 14 }, 18 new Transaction { Id = 5, Date = new DateTime(2017, 1, 1), Deposit = 15 }, 19 new Transaction { Id = 6, Date = new DateTime(2017, 2, 1), Deposit = 16 }, 20 new Transaction { Id = 7, Date = new DateTime(2017, 3, 1), Deposit = 17 }, 21 new Transaction { Id = 8, Date = new DateTime(2017, 4, 1), Deposit = 18 } 22 }; 23 24 var result = BundleTransactions(transactions); 25 26 DebugPrintTransactions(result); 27 Console.WriteLine(" "); 28 DebugPrintTransactions(result.ToList()); 29} 30 31public static IEnumerable<Transaction> BundleTransactions(IEnumerable<Transaction> transactions) 32{ 33 var notBundleLoanIds = new List<int> { 1, 2 }; 34 var groupByDate = transactions.GroupBy(a => a.Date).OrderBy(a => a.Key); 35 var bundleTransaction = new Transaction { Id = 0 }; 36 37 foreach (var group in groupByDate) 38 { 39 bundleTransaction.Date = group.Key; 40 bundleTransaction.Deposit = 0; 41 42 foreach (var transaction in group) 43 { 44 if (notBundleLoanIds.Any(a => a == transaction.Id)) 45 yield return transaction; 46 else 47 bundleTransaction.Deposit += transaction.Deposit; 48 } 49 yield return bundleTransaction; 50 } 51} 52 53public static void DebugPrintTransactions(IEnumerable<Transaction> transactions) 54{ 55 foreach (var transaction in transactions) 56 { 57 Console.WriteLine($"ID:{transaction.Id}, 日付:{transaction.Date:d}, 入金:{transaction.Deposit}"); 58 } 59}
DebugPrintTransactions(result);では以下の結果になります。
(期待どおりの結果です)
ID:1, 日付:2017/01/01, 入金:11
ID:0, 日付:2017/01/01, 入金:15
ID:2, 日付:2017/02/01, 入金:12
ID:0, 日付:2017/02/01, 入金:16
ID:0, 日付:2017/03/01, 入金:30
ID:0, 日付:2017/04/01, 入金:32
しかし、DebugPrintTransactions(result.ToList());では以下の結果になります。
なぜ、こうなるのでしょうか?
ID:1, 日付:2017/01/01, 入金:11
ID:0, 日付:2017/04/01, 入金:32
ID:2, 日付:2017/02/01, 入金:12
ID:0, 日付:2017/04/01, 入金:32
ID:0, 日付:2017/04/01, 入金:32
ID:0, 日付:2017/04/01, 入金:32

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/24 00:46
2017/06/24 00:47