Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

Enumerable.SelectMany<TSource, TResult>, méthode (IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>)

Projette chaque élément d'une séquence sur un IEnumerable<T> et aplatit les séquences résultantes en une seule séquence. L'index de chaque élément source est utilisé dans le formulaire projeté de l'élément.

Espace de noms :  System.Linq
Assembly :  System.Core (dans System.Core.dll)

public static IEnumerable<TResult> SelectMany<TSource, TResult>(
	this IEnumerable<TSource> source,
	Func<TSource, int, IEnumerable<TResult>> selector
)

Paramètres de type

TSource

Type des éléments de source.

TResult

Type des éléments de la séquence retournée par selector.

Paramètres

source
Type : System.Collections.Generic.IEnumerable<TSource>
Séquence de valeurs à projeter.
selector
Type : System.Func<TSource, Int32, IEnumerable<TResult>>
Fonction de transformation à appliquer à chaque élément source ; le deuxième paramètre de la fonction représente l'index de l'élément source.

Valeur de retour

Type : System.Collections.Generic.IEnumerable<TResult>
IEnumerable<T> dont les éléments résultent d'un appel de la fonction de transformation de type un-à-plusieurs sur chaque élément d'une séquence d'entrée.

Remarque sur l'utilisation

En Visual Basic et C#, vous pouvez appeler cette méthode comme une méthode d'instance sur n'importe quel objet de type IEnumerable<TSource>. Lorsque vous utilisez la syntaxe des méthodes d'instance pour appeler cette méthode, omettez le premier paramètre. Pour plus d'informations, consultez Méthodes d'extension (Visual Basic) ou Méthodes d'extension (Guide de programmation C#).

ExceptionCondition
ArgumentNullException

source ou selector est null.

Cette méthode est implémentée par exécution différée. La valeur de retour immédiate est un objet qui stocke toutes les informations requises pour réaliser l'action. La requête représentée par cette méthode n'est pas exécutée tant que l'objet n'est pas énuméré, soit par l'appel de sa méthode GetEnumerator directement, soit à l'aide de foreach dans Visual C# ou de For Each dans Visual Basic.

La méthode SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>) énumère la séquence d'entrée, utilise une fonction de transformation pour mapper chaque élément à un IEnumerable<T>, puis énumère et rapporte les éléments de chacun de ces objets IEnumerable<T>. Autrement dit, pour chaque élément de source, selector est appelé et une séquence de valeurs est retournée. SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>) aplatit ensuite cette collection en deux dimensions de collections en un IEnumerable<T> unidimensionnel et le retourne. Par exemple, si une requête utilise SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>) afin d'obtenir les ordres (de type Order) pour chaque client d'une base de données, le résultat est de type IEnumerable<Order> en C# ou IEnumerable(Of Order) dans Visual Basic. Si, à la place, la requête utilise Select afin d'obtenir les ordres, la collection de collections d'ordres n'est pas combinée et le résultat est de type IEnumerable<List<Order>> en C# ou IEnumerable(Of List(Of Order)) dans Visual Basic.

Le premier argument pour selector représente l'élément à traiter. Le deuxième argument pour selector représente l'index de base zéro de cet élément dans la séquence source. Cela peut s'avérer utile si les éléments sont dans un ordre connu et si vous souhaitez réaliser une action avec un élément à un index particulier, par exemple. Cela peut également être utile si vous souhaitez récupérer l'index d'un ou plusieurs élément(s).

L'exemple de code suivant montre comment utiliser le contrôle SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>) pour effectuer une projection de type un-à-plusieurs sur un tableau et utiliser l'index de chaque élément externe.


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

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

                // Project the items in the array by appending the index 
                // of each PetOwner to each pet's name in that petOwner's 
                // array of pets.
                IEnumerable<string> query =
                    petOwners.SelectMany((petOwner, index) =>
                                             petOwner.Pets.Select(pet => index + pet));

                foreach (string pet in query)
                {
                    Console.WriteLine(pet);
                }
            }

            // This code produces the following output:
            //
            // 0Scruffy
            // 0Sam
            // 1Walker
            // 1Sugar
            // 2Scratches
            // 2Diesel
            // 3Dusty



.NET Framework

Pris en charge dans : 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Bibliothèque de classes portable

Pris en charge dans : Bibliothèque de classes portable

.NET pour les applications du Windows Store

Pris en charge dans : Windows 8

.NET pour les applications Windows Phone

Pris en charge dans : Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft