Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método Enumerable.Join<TOuter, TInner, TKey, TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner, TResult>)

 

Publicado: octubre de 2016

Correlaciona los elementos de dos secuencias basadas en claves coincidentes. El comparador de igualdad predeterminado se usa para comparar claves.

Espacio de nombres:   System.Linq
Ensamblado:  System.Core (en 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
)

Parámetros

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

Primera secuencia que se va a combinar.

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

Secuencia que se va a combinar con la primera secuencia.

outerKeySelector
Type: System.Func<TOuter, TKey>

Función para extraer la clave de combinación a partir de cada elemento de la primera secuencia.

innerKeySelector
Type: System.Func<TInner, TKey>

Función para extraer la clave de combinación a partir de cada elemento de la segunda secuencia.

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

Función que va a crear un elemento de resultado a partir de dos elementos coincidentes.

Valor devuelto

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

Una IEnumerable<T> que tiene elementos de tipo TResult que se han obtenido al realizar una combinación interna de dos secuencias.

Parámetros de tipo

TOuter

Tipo de los elementos de la primera secuencia.

TInner

Tipo de los elementos de la segunda secuencia.

TKey

Tipo de las claves devueltas por las funciones del selector de claves.

TResult

Tipo de los elementos del resultado.

Exception Condition
ArgumentNullException

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

Este método se implementa mediante la ejecución diferida. El valor devuelto inmediato es un objeto que almacena toda la información necesaria para realizar la acción. La consulta representada por este método no se ejecuta hasta que se enumera el objeto llamando a su GetEnumerator método directamente o mediante foreach en Visual C# o For Each en Visual Basic.

El comparador de igualdad predeterminado, Default, se utiliza para el algoritmo hash y comparar las claves.

Una combinación hace referencia a la operación de correlacionar los elementos de dos orígenes de información basada en una clave común. Join<TOuter, TInner, TKey, TResult> combina las dos fuentes de información y las claves que se correlacionan en una llamada al método. Esto difiere del uso de SelectMany, lo que requiere más de una llamada de método para realizar la misma operación.

Join<TOuter, TInner, TKey, TResult> conserva el orden de los elementos de outer, y para cada uno de estos elementos, el orden de los elementos coincidentes de inner.

En la sintaxis de expresión de consulta, un join (Visual C#) o Join (Visual Basic) cláusula se convierte en una invocación de Join<TOuter, TInner, TKey, TResult>.

En términos de la base de datos relacional, la Join<TOuter, TInner, TKey, TResult> método implementa una combinación de igualdad interna. 'Interna' significa que sólo los elementos que tienen una correspondencia en otra secuencia se incluyen en los resultados. «Combinación de igualdad ' es una combinación en la que se comparan las claves son iguales. A izquierda de la operación de combinación externa no tiene ningún operador de consulta estándar dedicado, pero se puede realizar mediante el GroupJoin<TOuter, TInner, TKey, TResult> método. Vea Join Operations.

En el ejemplo de código siguiente se muestra cómo utilizar Join<TOuter, TInner, TKey, TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner, TResult>) para realizar una combinación interna de dos secuencias basándose en una clave común.

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
*/

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 3.5
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: