GroupJoin(TOuter, TInner, TKey, TResult) Metodo (IQueryable(TOuter), IEnumerable(TInner), Expression(Func(TOuter, TKey)), Expression(Func(TInner, TKey)), Expression(Func(TOuter, IEnumerable(TInner), TResult)))
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.GroupJoin<TOuter, TInner, TKey, TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter, TKey>>, Expression<Func<TInner, TKey>>, Expression<Func<TOuter, IEnumerable<TInner>, TResult>>)

 

Correla gli elementi di due sequenze in base all'uguaglianza delle chiavi e raggruppa i risultati. Per confrontare le chiavi viene utilizzato l'operatore di confronto di uguaglianza predefinito.

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

public static IQueryable<TResult> GroupJoin<TOuter, TInner, TKey, TResult>(
	this IQueryable<TOuter> outer,
	IEnumerable<TInner> inner,
	Expression<Func<TOuter, TKey>> outerKeySelector,
	Expression<Func<TInner, TKey>> innerKeySelector,
	Expression<Func<TOuter, IEnumerable<TInner>, TResult>> resultSelector
)

Parametri

outer

Prima sequenza da unire.

inner

Sequenza da unire alla prima sequenza.

outerKeySelector

Funzione per estrarre la chiave di aggiunta da ogni elemento della prima sequenza.

innerKeySelector

Funzione per estrarre la chiave di aggiunta da ogni elemento della seconda sequenza.

resultSelector

Funzione per creare un elemento di risultato da un elemento dalla prima sequenza e una raccolta di elementi corrispondenti dalla seconda sequenza.

Valore restituito

Type: System.Linq.IQueryable<TResult>

Un oggetto IQueryable<T> che contiene elementi di tipo TResult ottenuti eseguendo un'aggiunta raggruppata delle due sequenze.

Parametri di tipo

TOuter

Tipo degli elementi della prima sequenza.

TInner

Tipo degli elementi della seconda sequenza.

TKey

Tipo delle chiavi restituite dalle funzioni del selettore principale.

TResult

Tipo degli elementi di risultato.

Exception Condition
ArgumentNullException

outer o inner o outerKeySelector o innerKeySelector o resultSelector è null.

Nel metodo è presente almeno un parametro di tipo Expression<TDelegate> il cui argomento di tipo è costituito da uno dei tipi Func<T, TResult>.Per questi parametri è possibile passare un'espressione lambda che verrà compilata in un oggetto Expression<TDelegate>.

Il metodo GroupJoin<TOuter, TInner, TKey, TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter, TKey>>, Expression<Func<TInner, TKey>>, Expression<Func<TOuter, IEnumerable<TInner>, TResult>>) genera un oggetto MethodCallExpression che rappresenta una chiamata al metodo GroupJoin<TOuter, TInner, TKey, TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter, TKey>>, Expression<Func<TInner, TKey>>, Expression<Func<TOuter, IEnumerable<TInner>, TResult>>) stesso come un metodo generico costruito.Passa quindi MethodCallExpression al metodo CreateQuery<TElement>(Expression) di IQueryProvider rappresentato dalla proprietà Provider del parametro outer.

Il comportamento della query conseguente all'esecuzione di una struttura ad albero dell'espressione che rappresenta una chiamata a GroupJoin<TOuter, TInner, TKey, TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter, TKey>>, Expression<Func<TInner, TKey>>, Expression<Func<TOuter, IEnumerable<TInner>, TResult>>) dipende dall'implementazione del tipo del parametro outer.In base al comportamento previsto, le funzioni outerKeySelector e innerKeySelector vengono utilizzate per estrarre le chiavi da outer e da inner, rispettivamente.Viene verificata l’uguaglianza di queste chiavi per associare ogni elemento in outer a zero o più elementi da inner.Quindi viene richiamata la funzione resultSelector per proiettare un oggetto di risultato da ogni gruppo di elementi correlati.

Nell'esempio di codice riportato di seguito viene illustrato come utilizzare GroupJoin<TOuter, TInner, TKey, TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter, TKey>>, Expression<Func<TInner, TKey>>, Expression<Func<TOuter, IEnumerable<TInner>, TResult>>) per eseguire un join raggruppato sulle due sequenze.

class Person
{
    public string Name { get; set; }
}

class Pet
{
    public string Name { get; set; }
    public Person Owner { get; set; }
}

public static void GroupJoinEx1()
{
    Person magnus = new Person { Name = "Hedlund, Magnus" };
    Person terry = new Person { Name = "Adams, Terry" };
    Person charlotte = new Person { Name = "Weiss, Charlotte" };

    Pet barley = new Pet { Name = "Barley", Owner = terry };
    Pet boots = new Pet { Name = "Boots", Owner = terry };
    Pet whiskers = new Pet { Name = "Whiskers", Owner = charlotte };
    Pet daisy = new Pet { Name = "Daisy", Owner = magnus };

    List<Person> people = new List<Person> { magnus, terry, charlotte };
    List<Pet> pets = new List<Pet> { barley, boots, whiskers, daisy };

    // Create a list where each element is an anonymous 
    // type that contains a person's name and a collection 
    // of names of the pets that are owned by them.
    var query =
        people.AsQueryable().GroupJoin(pets,
                         person => person,
                         pet => pet.Owner,
                         (person, petCollection) =>
                             new
                             {
                                 OwnerName = person.Name,
                                 Pets = petCollection.Select(pet => pet.Name)
                             });

    foreach (var obj in query)
    {
        // Output the owner's name.
        Console.WriteLine("{0}:", obj.OwnerName);
        // Output each of the owner's pet's names.
        foreach (string pet in obj.Pets)
            Console.WriteLine("  {0}", pet);
    }
}

/*
    This code produces the following output:

    Hedlund, Magnus:
      Daisy
    Adams, Terry:
      Barley
      Boots
    Weiss, Charlotte:
      Whiskers
*/

Universal Windows Platform
Disponibile da 4.5
.NET Framework
Disponibile da 3.5
Portable Class Library
Supportato in: portable .NET platforms
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.1
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra:
© 2016 Microsoft