この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

Enumerable.SelectMany<TSource, TCollection, TResult> メソッド (IEnumerable<TSource>, Func<TSource, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>)

 

公開日: 2016年10月

シーケンスの各要素、 IEnumerable<T>, 、結果のシーケンスを 1 つのシーケンスに平坦化し、そこにある各要素に対して結果のセレクター関数を呼び出します。

名前空間:   System.Linq
アセンブリ:  System.Core (System.Core.dll 内)

public static IEnumerable<TResult> SelectMany<TSource, TCollection, TResult>(
	this IEnumerable<TSource> source,
	Func<TSource, IEnumerable<TCollection>> collectionSelector,
	Func<TSource, TCollection, TResult> resultSelector
)

パラメーター

source
Type: System.Collections.Generic.IEnumerable<TSource>

射影する値のシーケンス。

collectionSelector
Type: System.Func<TSource, IEnumerable<TCollection>>

入力シーケンスの各要素に適用する変換関数。

resultSelector
Type: System.Func<TSource, TCollection, TResult>

中間のシーケンスの各要素に適用する変換関数。

戻り値

Type: System.Collections.Generic.IEnumerable<TResult>

IEnumerable<T> 要素が一対多の変換関数を呼び出した結果 collectionSelector の各要素に対して source し、各シーケンス要素とそれに対応するソース要素を結果の要素にマップします。

型パラメーター

TSource

要素の型 sourceします。

TCollection

によって収集される中間要素の型 collectionSelectorします。

TResult

結果のシーケンスの要素の型。

Exception Condition
ArgumentNullException

sourcecollectionSelector、または resultSelector は、null です。

このメソッドは遅延実行を使用して実装されます。 すぐに、値は、操作を実行するために必要なすべての情報を格納するオブジェクトを返します。 オブジェクトのいずれかを呼び出すことが列挙されるまで、このメソッドで表されるクエリは実行されません、 GetEnumerator メソッドを使用して直接または foreach で Visual C# または For Each で Visual Basicします。

SelectMany<TSource, TCollection, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>) メソッドは、の要素を保持する必要がある場合に便利な source への呼び出し後に発生するクエリ ロジックのスコープ内 SelectMany<TSource, TCollection, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>)します。 コード例については、「使用例」のセクションを参照してください。 型のオブジェクト間の双方向関係があるかどうか TSource と型のオブジェクト TCollection, 、つまり、型のオブジェクト TCollection を取得するプロパティを提供、 TSource 、これを生成したオブジェクトのこのオーバー ロードを必要としない SelectMany<TSource, TCollection, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>)します。 使用する代わりに、 SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TResult>>) に戻ると、 TSource オブジェクトを通じて、 TCollection オブジェクトです。

クエリ式の構文で各 from 句 (Visual C#) または From 句 (Visual Basic) の呼び出しに 1 つは変換の頭文字の後 SelectMany<TSource, TResult>します。

次のコード例では、使用して SelectMany<TSource, TCollection, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TCollection>>, Func<TSource, TCollection, TResult>) 配列に対して一対多の射影を実行し、結果のセレクター関数を使用して、それぞれ対応する要素をソース シーケンスの最後の呼び出しのスコープ内から Selectします。

class PetOwner
{
    public string Name { get; set; }
    public List<string> Pets { get; set; }
}

public static void SelectManyEx3()
{
    PetOwner[] petOwners =
        { new PetOwner { Name="Higa", 
              Pets = new List<string>{ "Scruffy", "Sam" } },
          new PetOwner { Name="Ashkenazi", 
              Pets = new List<string>{ "Walker", "Sugar" } },
          new PetOwner { Name="Price", 
              Pets = new List<string>{ "Scratches", "Diesel" } },
          new PetOwner { Name="Hines", 
              Pets = new List<string>{ "Dusty" } } };

    // Project the pet owner's name and the pet's name.
    var query =
        petOwners
        .SelectMany(petOwner => petOwner.Pets, (petOwner, petName) => new { petOwner, petName })
        .Where(ownerAndPet => ownerAndPet.petName.StartsWith("S"))
        .Select(ownerAndPet =>
                new
                {
                    Owner = ownerAndPet.petOwner.Name,
                    Pet = ownerAndPet.petName
                }
        );

    // Print the results.
    foreach (var obj in query)
    {
        Console.WriteLine(obj);
    }
}

// This code produces the following output:
//
// {Owner=Higa, Pet=Scruffy}
// {Owner=Higa, Pet=Sam}
// {Owner=Ashkenazi, Pet=Sugar}
// {Owner=Price, Pet=Scratches}

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
3.5 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能
Windows Phone
8.1 以降で使用可能
トップに戻る
表示: