Leer en inglés

Compartir a través de


Queryable.Join Método

Definición

Correlaciona los elementos de dos secuencias en función de las claves coincidentes.

Sobrecargas

Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>)

Correlaciona los elementos de dos secuencias en función de las claves coincidentes. El comparador de igualdad predeterminado se usa para comparar claves.

Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>, IEqualityComparer<TKey>)

Correlaciona los elementos de dos secuencias en función de las claves coincidentes. Se usa un IEqualityComparer<T> especificado para comparar claves.

Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>)

Source:
Queryable.cs
Source:
Queryable.cs
Source:
Queryable.cs

Correlaciona los elementos de dos secuencias en función de las claves coincidentes. El comparador de igualdad predeterminado se usa para comparar claves.

C#
public static System.Linq.IQueryable<TResult> Join<TOuter,TInner,TKey,TResult> (this System.Linq.IQueryable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, System.Linq.Expressions.Expression<Func<TOuter,TKey>> outerKeySelector, System.Linq.Expressions.Expression<Func<TInner,TKey>> innerKeySelector, System.Linq.Expressions.Expression<Func<TOuter,TInner,TResult>> resultSelector);

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 de resultado.

Parámetros

outer
IQueryable<TOuter>

Primera secuencia que se va a unir.

inner
IEnumerable<TInner>

Secuencia que se va a unir a la primera secuencia.

outerKeySelector
Expression<Func<TOuter,TKey>>

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

innerKeySelector
Expression<Func<TInner,TKey>>

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

resultSelector
Expression<Func<TOuter,TInner,TResult>>

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

Devoluciones

IQueryable<TResult>

Un IQueryable<T> que tiene elementos de tipo TResult obtenidos mediante la realización de una combinación interna en dos secuencias.

Excepciones

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

Ejemplos

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

C#
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 };

    // Join the list of Person objects and the list of Pet objects
    // to create a list of person-pet pairs where each element is
    // an anonymous type that contains the name of pet and the name
    // of the person that owns the pet.
    var query = people.AsQueryable().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
*/

Comentarios

Este método tiene al menos un parámetro de tipo Expression<TDelegate> cuyo argumento de tipo es uno de los tipos de Func<T,TResult>. Para estos parámetros, puede pasar una expresión lambda y se compilará en un Expression<TDelegate>.

El método Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>) genera un MethodCallExpression que representa la llamada a Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>) como un método genérico construido. A continuación, pasa el MethodCallExpression al método CreateQuery<TElement>(Expression) del IQueryProvider representado por la propiedad Provider del parámetro outer.

El comportamiento de la consulta que se produce como resultado de ejecutar un árbol de expresión que representa la llamada a Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>) depende de la implementación del tipo del parámetro outer. El comportamiento esperado es el de una combinación interna. Las funciones outerKeySelector y innerKeySelector se usan para extraer claves de outer y inner, respectivamente. Estas claves se comparan con la igualdad para buscar coincidencias con los elementos de cada secuencia. Se almacena un par de elementos para cada elemento de inner que coincide con un elemento de outer. A continuación, se invoca la función resultSelector para proyectar un objeto de resultado a partir de cada par de elementos coincidentes.

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>, IEqualityComparer<TKey>)

Source:
Queryable.cs
Source:
Queryable.cs
Source:
Queryable.cs

Correlaciona los elementos de dos secuencias en función de las claves coincidentes. Se usa un IEqualityComparer<T> especificado para comparar claves.

C#
public static System.Linq.IQueryable<TResult> Join<TOuter,TInner,TKey,TResult> (this System.Linq.IQueryable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, System.Linq.Expressions.Expression<Func<TOuter,TKey>> outerKeySelector, System.Linq.Expressions.Expression<Func<TInner,TKey>> innerKeySelector, System.Linq.Expressions.Expression<Func<TOuter,TInner,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
C#
public static System.Linq.IQueryable<TResult> Join<TOuter,TInner,TKey,TResult> (this System.Linq.IQueryable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, System.Linq.Expressions.Expression<Func<TOuter,TKey>> outerKeySelector, System.Linq.Expressions.Expression<Func<TInner,TKey>> innerKeySelector, System.Linq.Expressions.Expression<Func<TOuter,TInner,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);

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 de resultado.

Parámetros

outer
IQueryable<TOuter>

Primera secuencia que se va a unir.

inner
IEnumerable<TInner>

Secuencia que se va a unir a la primera secuencia.

outerKeySelector
Expression<Func<TOuter,TKey>>

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

innerKeySelector
Expression<Func<TInner,TKey>>

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

resultSelector
Expression<Func<TOuter,TInner,TResult>>

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

comparer
IEqualityComparer<TKey>

Un IEqualityComparer<T> a hash y comparar claves.

Devoluciones

IQueryable<TResult>

Un IQueryable<T> que tiene elementos de tipo TResult obtenidos mediante la realización de una combinación interna en dos secuencias.

Excepciones

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

Comentarios

Este método tiene al menos un parámetro de tipo Expression<TDelegate> cuyo argumento de tipo es uno de los tipos de Func<T,TResult>. Para estos parámetros, puede pasar una expresión lambda y se compilará en un Expression<TDelegate>.

El método Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>, IEqualityComparer<TKey>) genera un MethodCallExpression que representa la llamada a Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>, IEqualityComparer<TKey>) como un método genérico construido. A continuación, pasa el MethodCallExpression al método CreateQuery<TElement>(Expression) del IQueryProvider representado por la propiedad Provider del parámetro outer.

El comportamiento de la consulta que se produce como resultado de ejecutar un árbol de expresión que representa la llamada a Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>, IEqualityComparer<TKey>) depende de la implementación del tipo del parámetro outer. El comportamiento esperado es el de una combinación interna. Las funciones outerKeySelector y innerKeySelector se usan para extraer claves de outer y inner, respectivamente. Estas claves se comparan con la igualdad mediante comparer. El resultado de las comparaciones se usa para crear un par coincidente para cada elemento de inner que coincida con un elemento de outer. A continuación, se invoca la función resultSelector para proyectar un objeto de resultado a partir de cada par de elementos coincidentes.

Se aplica a

.NET 9 y otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0