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 Queryable.SelectMany<TSource, TResult>(IQueryable<TSource>, Expression<Func<TSource, IEnumerable<TResult>>>)

 

Data di pubblicazione: ottobre 2016

Proietta ogni elemento di una sequenza a un IEnumerable<T> e combina le sequenze risultanti in un'unica sequenza.

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

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

Parametri

source
Type: System.Linq.IQueryable<TSource>

Sequenza di valori da proiettare.

selector
Type: System.Linq.Expressions.Expression<Func<TSource, IEnumerable<TResult>>>

Una funzione di proiezione da applicare a ogni elemento.

Valore restituito

Type: System.Linq.IQueryable<TResult>

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

Parametri tipo

TSource

Tipo degli elementi di source.

TResult

Il tipo degli elementi della sequenza restituita dalla funzione rappresentata da selector.

Exception Condition
ArgumentNullException

source o selector è null.

Questo metodo contiene almeno un parametro di tipo Expression<TDelegate> il cui argomento di tipo è uno del Func<T, TResult> tipi. Per questi parametri, è possibile passare un'espressione lambda e verrà compilato in un Expression<TDelegate>.

Il SelectMany<TSource, TResult>(IQueryable<TSource>, Expression<Func<TSource, IEnumerable<TResult>>>) metodo genera un MethodCallExpression che rappresenta una chiamata SelectMany<TSource, TResult>(IQueryable<TSource>, Expression<Func<TSource, IEnumerable<TResult>>>) stesso come un metodo generico costruito. Passa quindi il MethodCallExpression per il CreateQuery(Expression) metodo il IQueryProvider rappresentato dal Provider proprietà del source parametro.

Il comportamento della query che si verifica in seguito all'esecuzione di una struttura ad albero dell'espressione che rappresenta una chiamata SelectMany<TSource, TResult>(IQueryable<TSource>, Expression<Func<TSource, IEnumerable<TResult>>>) dipende dall'implementazione del tipo di source parametro. Il comportamento previsto è che richiami selector su ogni elemento di source per proiettarlo in una maschera enumerabile. Concatena quindi i risultati enumerabili in una singola sequenza unidimensionale.

Esempio di codice seguente viene illustrato come utilizzare SelectMany<TSource, TResult>(IQueryable<TSource>, Expression<Func<TSource, IEnumerable<TResult>>>) per eseguire una proiezione di 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.AsQueryable().SelectMany(petOwner => petOwner.Pets);

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

    // Only one foreach loop is required to iterate through the
    // results because 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.AsQueryable().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
*/

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.1
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: