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.Join<TOuter, TInner, TKey, TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner, TResult>)

 

Data di pubblicazione: ottobre 2016

Mette in correlazione gli elementi di due sequenze in base alle chiavi corrispondenti. Per confrontare le chiavi viene usato l'operatore di confronto uguaglianze predefinito.

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

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

Parametri

outer
Type: System.Collections.Generic.IEnumerable<TOuter>

Prima sequenza da unire.

inner
Type: System.Collections.Generic.IEnumerable<TInner>

Sequenza da unire alla prima sequenza.

outerKeySelector
Type: System.Func<TOuter, TKey>

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

innerKeySelector
Type: System.Func<TInner, TKey>

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

resultSelector
Type: System.Func<TOuter, TInner, TResult>

Funzione per creare un elemento di risultato da due elementi corrispondenti.

Valore restituito

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

Un IEnumerable<T> che contiene elementi di tipo TResult ottenuti eseguendo un inner join di due sequenze.

Parametri 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.

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.

Operatore di uguaglianza predefinito Default, viene utilizzato per l'hash e il confronto delle chiavi.

Un join fa riferimento all'operazione di correlare gli elementi di due origini di informazioni in base a una chiave comune. Join<TOuter, TInner, TKey, TResult> offre due origini di informazioni e le chiavi da cui vengono associate tra loro in una chiamata al metodo. Questo comportamento è diverso dall'utilizzo di SelectMany, che richiede più di una chiamata al metodo per eseguire la stessa operazione.

Join<TOuter, TInner, TKey, TResult> mantiene l'ordine degli elementi di outer, e per ciascuno di questi elementi, l'ordine degli elementi corrispondenti di inner.

Nella sintassi delle espressioni di query, un join (Visual C#) o Join (Visual Basic) clausola viene convertita in una chiamata di Join<TOuter, TInner, TKey, TResult>.

In termini di database relazionale, il Join<TOuter, TInner, TKey, TResult> metodo implementa un inner equijoin. 'Interna' indica che solo gli elementi che hanno una corrispondenza in altra sequenza sono inclusi nei risultati. Un ' equijoin' è un join in cui le chiavi vengono confrontati per verificarne l'uguaglianza. Un'operazione di outer join sinistra non dispone di alcun operatore di query standard dedicato, ma che può essere eseguita utilizzando il GroupJoin<TOuter, TInner, TKey, TResult> metodo. Vedere Join Operations.

Esempio di codice seguente viene illustrato come utilizzare Join<TOuter, TInner, TKey, TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner, TResult>) per eseguire un inner join delle due sequenze in base a una chiave comune.

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

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

public static void JoinEx1()
{
    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 of Person-Pet pairs where 
    // each element is an anonymous type that contains a
    // Pet's name and the name of the Person that owns the Pet.
    var query =
        people.Join(pets,
                    person => person,
                    pet => pet.Owner,
                    (person, pet) =>
                        new { OwnerName = person.Name, Pet = pet.Name });

    foreach (var obj in query)
    {
        Console.WriteLine(
            "{0} - {1}",
            obj.OwnerName,
            obj.Pet);
    }
}

/*
 This code produces the following output:

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

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: