Questa pagina è stata utile?
I suggerimenti relativi al contenuto di questa pagina sono importanti. Comunicaceli.
Altri suggerimenti?
1500 caratteri rimanenti
Metodo SelectMany(TSource, TResult) (IEnumerable(TSource), Func(TSource, IEnumerable(TResult)))
Il presente articolo è stato tradotto automaticamente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale. Ulteriori informazioni.
Traduzione
Originale

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

Proietta ogni elemento di una sequenza a un oggetto IEnumerable<T> e semplifica le sequenze risultanti in un’unica sequenza.

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, IEnumerable<TResult>> selector
)

Parametri di tipo

TSource

Tipo degli elementi di source.

TResult

Tipo degli elementi della sequenza restituita da selector.

Parametri

source
Tipo: System.Collections.Generic.IEnumerable<TSource>
Sequenza di valori da proiettare.
selector
Tipo: System.Func<TSource, IEnumerable<TResult>>
Funzione di trasformazione da applicare a ogni elemento.

Valore restituito

Tipo: System.Collections.Generic.IEnumerable<TResult>
Oggetto IEnumerable<T> i cui elementi sono il risultato ottenuto richiamando la funzione di trasformazione uno a molti su ogni elemento della sequenza di input.

Nota sull'utilizzo

In Visual Basic e C# è possibile chiamare questo metodo come metodo di istanza su qualsiasi oggetto di tipo IEnumerable<TSource>. Per chiamare il metodo utilizzando la sintassi del metodo di istanza, omettere il primo parametro. Per ulteriori informazioni, vedere Metodi di estensione (Visual Basic) o Metodi di estensione (Guida per programmatori C#).

EccezioneCondizione
ArgumentNullException

source o selector è null.

Questo metodo viene implementato tramite esecuzione posticipata. Il valore restituito immediato è un oggetto che contiene tutte le informazioni necessarie all'esecuzione dell'azione. La query rappresentata da questo metodo non viene eseguita finché l'oggetto non viene enumerato tramite chiamata diretta al relativo metodo GetEnumerator o utilizzando l'oggetto foreach in Visual C# oppure For Each in Visual Basic.

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

Nella sintassi di una espressione di query, ogni clausola from (Visual C#) o From (Visual Basic) successiva alla prima, viene convertita in una chiamata di SelectMany.

Nell'esempio di codice riportato di seguito viene illustrato come utilizzare SelectMany<TSource, TResult>(IEnumerable<TSource>, Func<TSource, IEnumerable<TResult>>) per eseguire una proiezione uno a molti su una matrice.


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

            public static void SelectManyEx1()
            {
                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" } } };

                // Query using SelectMany().
                IEnumerable<string> query1 = petOwners.SelectMany(petOwner => petOwner.Pets);

                Console.WriteLine("Using SelectMany():");

                // Only one foreach loop is required to iterate 
                // through the results since it is a
                // one-dimensional collection.
                foreach (string pet in query1)
                {
                    Console.WriteLine(pet);
                }

                // This code shows how to use Select() 
                // instead of SelectMany().
                IEnumerable<List<String>> query2 =
                    petOwners.Select(petOwner => petOwner.Pets);

                Console.WriteLine("\nUsing Select():");

                // Notice that two foreach loops are required to 
                // iterate through the results
                // because the query returns a collection of arrays.
                foreach (List<String> petList in query2)
                {
                    foreach (string pet in petList)
                    {
                        Console.WriteLine(pet);
                    }
                    Console.WriteLine();
                }
            }

            /*
             This code produces the following output:

             Using SelectMany():
             Scruffy
             Sam
             Walker
             Sugar
             Scratches
             Diesel

             Using Select():
             Scruffy
             Sam

             Walker
             Sugar

             Scratches
             Diesel
            */



.NET Framework

Supportato in: 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Libreria di classi portabile

Supportato in: Libreria di classi portabile

.NET per applicazioni Windows Store

Supportato in: Windows 8

.NET per applicazioni Windows Phone

Supportato in: 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 (ruoli di base del server non supportati), Windows Server 2008 R2 (ruoli di base del server supportati con SP1 o versione successiva, Itanium non supportato)

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2015 Microsoft