これがどのように発生したのか疑問に思われるかもしれませんが、私はEntityFrameworkのいくつかの結果セットを使用しています。
IEnumerable<IEnumerable<string>>
;であるオブジェクトがあります。基本的に、文字列のリストのリスト。
文字列のすべてのリストを1つの大きな文字列リストにマージしたいと思います。
C#.netでこれを行うための最良の方法は何ですか?
これがどのように発生したのか疑問に思われるかもしれませんが、私はEntityFrameworkのいくつかの結果セットを使用しています。
IEnumerable<IEnumerable<string>>
;であるオブジェクトがあります。基本的に、文字列のリストのリスト。
文字列のすべてのリストを1つの大きな文字列リストにマージしたいと思います。
C#.netでこれを行うための最良の方法は何ですか?
LINQSelectManyメソッドを使用します。
IEnumerable<IEnumerable<string>> myOuterList = // some IEnumerable<IEnumerable<string>>...
IEnumerable<String> allMyStrings = myOuterList.SelectMany(sl => sl);
ここで何が起こっているのかを非常に明確にするために(私はこれが一種の魔術であると考える人々の考えが嫌いであり、他の人々が同じ答えを削除したことを残念に思います):
SelectManyは、の拡張メソッド(構文糖衣構文を介して特定のタイプのインスタンスメソッドのように見える静的メソッド)IEnumerable<T>
です。これには、元の列挙の列挙と、その各項目を列挙に変換するための関数が必要です。
アイテムはすでに列挙されているため、変換関数は単純です。入力を返すだけです( 「名前の付いたパラメータを取得して返すsl => sl
」という意味sl
です)。次に、SelectManyはこれらのそれぞれについて順番に列挙を提供し、「フラット化された」リストを作成します。
Concat
次の方法を使用します。
firstEnumerable.Concat(secondEnumerable)
を使用SelectMany
すると、不要な両方の列挙の各要素の追加評価が強制されます。