LINQをList<コレクションクラス>にどう書くか?
LINQの記事では、string型やint型のListを扱っているものはよくある。しかし、独自で作成したコレクションクラスのListをどうLINQで処理するかの記事が発見しづらかった。そのため、ここにその仕方を記述する。
元となるList<独自クラスで複数のフィールドを持つ>の値で、同一科目のものは集約しつつ、金額は合計値を記述するようなテキスト(メモ)を生成したい。
publicstringWritingMemo(List<JournalizingMemo>MemoDrafts){//メモの元MemoDraftsから同一会計名目や貸借項目は集約し金額は合計値を記述したいのでvarmemoArranged=MemoDrafts.GroupBy(x=>new{x.SlipDate,x.AccountingName,x.BalanceName,x.SubjectName}).Select(y=>new{SlipDate=y.Key.SlipDate,Amount=y.Sum(z=>z.Amount),AccountingName=y.Key.AccountingName,BalanceName=y.Key.BalanceName,SubjectName=y.Key.SubjectName}).OrderBy(x=>x.SlipDate).ThenBy(x=>x.AccountingName).ThenBy(x=>x.BalanceName).ThenBy(x=>x.SubjectName);//メモのヘッダー作成sb.AppendLine("出力日:"+DateTime.Now.Date.ToString("yyyy/mm/dd"));sb.AppendLine("");//集約結果からテキストに起こすvarsb=newStringBuilder();foreach(varrecordinmemoArranged){sb.AppendLine("伝票日付:"+record.SlipDate.ToString("yyyy/mm/dd"));sb.AppendLine($"口座情報:{record.AccountingName}");//...中略}returnsb.ToString();という書き方で、独自のコレクションクラスに対しても、LINQを用いれば簡単に集約した結果を記述できる。