Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Enumerable.SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>)

 

Data di pubblicazione: ottobre 2016

Proietta ogni elemento di una sequenza a un IEnumerable<T>, e semplifica le sequenze risultanti in un'unica sequenza. L'indice di ogni elemento di origine viene usato nella maschera proiettata di tale elemento.

Spazio dei nomi:   System.Linq
Assembly:  System.Core (in System.Core.dll)

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

Parametri

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

Sequenza di valori da proiettare.

selector
Type: System.Func<TSource, Int32, IEnumerable<TResult>>

Funzione di trasformazione da applicare a ogni elemento di origine; il secondo parametro della funzione rappresenta l'indice dell'elemento di origine.

Valore restituito

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

Un IEnumerable<T> i cui elementi sono il risultato ottenuto richiamando la funzione di trasformazione uno-a-molti su ogni elemento di una sequenza di input.

Parametri tipo

TSource

Tipo degli elementi di source.

TResult

Il tipo degli elementi della sequenza restituita da selector.

Exception Condition
ArgumentNullException

source o selector è null.

Questo metodo viene implementato tramite esecuzione posticipata. Il valore restituito immediato è un oggetto che archivia tutte le informazioni necessarie per eseguire l'azione. La query rappresentata da questo metodo non viene eseguita finché l'oggetto viene enumerata chiamando il relativo GetEnumerator metodo direttamente o tramite foreach in Visual C# o For Each in Visual Basic.

Il SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>) metodo enumera la sequenza di input, utilizza una funzione di trasformazione per eseguire il mapping di ogni elemento di un IEnumerable<T>, e quindi enumera e restituisce gli elementi di ognuno di tali IEnumerable<T> oggetto. Ovvero, per ogni elemento della source, selector viene richiamato e viene restituita una sequenza di valori. SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>) semplifica quindi questo insieme bidimensionale di raccolte in una matrice unidimensionale IEnumerable<T> e lo restituisce. Ad esempio, se una query utilizza SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>) per ottenere gli ordini (di tipo Order) per ogni cliente in un database, il risultato è di tipo IEnumerable<Order> in c# o IEnumerable(Of Order) in Visual Basic. Se invece la query utilizza Select<TSource, TResult> per ottenere gli ordini, l'insieme di insiemi di ordini non è combinato e il risultato è di tipo IEnumerable<List<Order>> in c# o IEnumerable(Of List(Of Order)) in Visual Basic.

Il primo argomento selector rappresenta l'elemento da elaborare. Il secondo argomento selector rappresenta l'indice in base zero dell'elemento nella sequenza di origine. Può essere utile se gli elementi in un ordine noto e si desidera eseguire un'operazione con un elemento in corrispondenza di un indice specifico, ad esempio. Può inoltre essere utile se si desidera recuperare l'indice di uno o più elementi.

Esempio di codice seguente viene illustrato come utilizzare SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, Int32, IEnumerable<TResult>>) per eseguire una proiezione di uno-a-molti su una matrice e utilizzare l'indice di ogni elemento esterno.

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

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 3.5
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: