【C#, Linq】SelectManyメソッドの使い方

  • このエントリーをはてなブックマークに追加

リストのプロパティを持つクラスの一覧を扱う際、foreachを何重か回してデータにアクセスします。しかし、LinqのSelectManyメソッドを利用すると、コレクションの中のコレクションを一つのコレクションに纏めることができます。これを平坦化といい、foreachでの深いネストを書く必要もないため非常に便利です。

     
  1. クラス作成
  2. foreachを利用する
  3. Linq:SelectManyメソッドを利用する

 1. クラス作成

リストプロパティが定義してある複雑なクラスの例として、部署クラスの中に課クラスの一覧が、そして、課クラスの中に社員一覧が定義されているクラスを作成します。

●部署クラス

●仮データ

 2. foreachを利用する

社員検索機能作成で社員Id=7の社員を取得する際、一般的にforeachを利用し部署内の課内の社員にアクセスし、入力された社員Idと一致する社員を探す必要があります。

●社員検索

部署一覧のループ、部署内の課一覧のループ、課内の社員一覧のループが必要になるため三重でforeachを回す必要があります。上記のコードはforeachのネストが深くなってしまうため、あまりいいコードとは言えません。

 3. Linq:SelectManyメソッドを利用する

SelectManyメソッドと調べると、「シーケンスの各要素を IEnumerable<T> に射影し、結果のシーケンスを 1 つのシーケンスに平坦化します。」と書いてありますがわかりにくいため、実際にコードを書いて確認します。

●社員検索

デバッグ実行を行い、SelectManyメソッドを利用して取得した社員一覧の結果が下記になります。workersに社員一覧が入っていることが確認できます。

さらにLinqのFirstOrDefualtメソッドを利用することで、検索対象社員Idに一致する社員を取得することができます。検索対象結果が複数になる場合はLinqのWhereメソッドを利用してください。

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*