Ler em inglês

Compartilhar via


Enumerable.GroupJoin Método

Definição

Correlaciona os elementos de duas sequências com base na igualdade de chave e agrupa os resultados.

Sobrecargas

GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>)

Correlaciona os elementos de duas sequências com base na igualdade de chaves e agrupa os resultados. O comparador de igualdade padrão é usado para comparar chaves.

GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>, IEqualityComparer<TKey>)

Correlaciona os elementos de duas sequências com base na igualdade de chave e agrupa os resultados. Um IEqualityComparer<T> especificado é usado para comparar chaves.

GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>)

Origem:
GroupJoin.cs
Origem:
GroupJoin.cs
Origem:
GroupJoin.cs

Correlaciona os elementos de duas sequências com base na igualdade de chaves e agrupa os resultados. O comparador de igualdade padrão é usado para comparar chaves.

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

Parâmetros de tipo

TOuter

O tipo dos elementos da primeira sequência.

TInner

O tipo dos elementos da segunda sequência.

TKey

O tipo das chaves retornadas pelas funções do seletor de chave.

TResult

O tipo dos elementos de resultado.

Parâmetros

outer
IEnumerable<TOuter>

A primeira sequência a ser unida.

inner
IEnumerable<TInner>

A sequência a ser unida à primeira sequência.

outerKeySelector
Func<TOuter,TKey>

Uma função para extrair a chave de junção de cada elemento da primeira sequência.

innerKeySelector
Func<TInner,TKey>

Uma função para extrair a chave de junção de cada elemento da segunda sequência.

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

Uma função para criar um elemento de resultado de um elemento da primeira sequência e uma coleção de elementos correspondentes da segunda sequência.

Retornos

IEnumerable<TResult>

Um IEnumerable<T> que contém elementos do tipo TResult obtidos executando uma junção agrupada em duas sequências.

Exceções

outer ou inner ou outerKeySelector ou innerKeySelector ou resultSelector é null.

Exemplos

O exemplo de código a seguir demonstra como usar GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>) para executar uma junção agrupada em duas sequências.

C#
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 they own.
    var query =
        people.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
*/

Comentários

Esse método é implementado usando a execução adiada. O valor de retorno imediato é um objeto que armazena todas as informações necessárias para executar a ação. A consulta representada por esse método não é executada até que o objeto seja enumerado chamando seu método GetEnumerator diretamente ou usando foreach em C# ou For Each no Visual Basic.

O comparador de igualdade padrão, Default, é usado para hash e comparar chaves.

GroupJoin produz resultados hierárquicos, o que significa que elementos de outer são emparelhados com coleções de elementos correspondentes de inner. GroupJoin permite que você baseie seus resultados em um conjunto inteiro de correspondências para cada elemento de outer.

Observação

Se não houver elementos correlacionados em inner para um determinado elemento de outer, a sequência de correspondências desse elemento estará vazia, mas ainda aparecerá nos resultados.

A função resultSelector é chamada apenas uma vez para cada elemento outer junto com uma coleção de todos os elementos inner que correspondem ao elemento outer. Isso difere do método Join, no qual a função seletora de resultados é invocada em pares que contêm um elemento de outer e um elemento de inner.

GroupJoin preserva a ordem dos elementos de outere, para cada elemento de outer, a ordem dos elementos correspondentes de inner.

GroupJoin não tem equivalente direto em termos de banco de dados relacionais tradicionais. No entanto, esse método implementa um superconjunto de junções internas e junções externas esquerdas. Ambas as operações podem ser gravadas em termos de uma junção agrupada. Para obter mais informações, consulte Operações de junção.

Na sintaxe da expressão de consulta, uma cláusula join ... into (C#) ou Group Join (Visual Basic) se traduz em uma invocação de GroupJoin.

Confira também

Aplica-se a

.NET 9 e outras versões
Produto Versões
.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 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

GroupJoin<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,IEnumerable<TInner>, TResult>, IEqualityComparer<TKey>)

Origem:
GroupJoin.cs
Origem:
GroupJoin.cs
Origem:
GroupJoin.cs

Correlaciona os elementos de duas sequências com base na igualdade de chave e agrupa os resultados. Um IEqualityComparer<T> especificado é usado para comparar chaves.

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

Parâmetros de tipo

TOuter

O tipo dos elementos da primeira sequência.

TInner

O tipo dos elementos da segunda sequência.

TKey

O tipo das chaves retornadas pelas funções do seletor de chave.

TResult

O tipo dos elementos de resultado.

Parâmetros

outer
IEnumerable<TOuter>

A primeira sequência a ser unida.

inner
IEnumerable<TInner>

A sequência a ser unida à primeira sequência.

outerKeySelector
Func<TOuter,TKey>

Uma função para extrair a chave de junção de cada elemento da primeira sequência.

innerKeySelector
Func<TInner,TKey>

Uma função para extrair a chave de junção de cada elemento da segunda sequência.

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

Uma função para criar um elemento de resultado de um elemento da primeira sequência e uma coleção de elementos correspondentes da segunda sequência.

comparer
IEqualityComparer<TKey>

Um IEqualityComparer<T> ao hash e às chaves de comparação.

Retornos

IEnumerable<TResult>

Um IEnumerable<T> que contém elementos do tipo TResult obtidos executando uma junção agrupada em duas sequências.

Exceções

outer ou inner ou outerKeySelector ou innerKeySelector ou resultSelector é null.

Comentários

Esse método é implementado usando a execução adiada. O valor de retorno imediato é um objeto que armazena todas as informações necessárias para executar a ação. A consulta representada por esse método não é executada até que o objeto seja enumerado chamando seu método GetEnumerator diretamente ou usando foreach em C# ou For Each no Visual Basic.

Se comparer for null, o comparador de igualdade padrão, Default, será usado para hash e comparar chaves.

GroupJoin produz resultados hierárquicos, o que significa que elementos de outer são emparelhados com coleções de elementos correspondentes de inner. GroupJoin permite que você baseie seus resultados em um conjunto inteiro de correspondências para cada elemento de outer.

Observação

Se não houver elementos correlacionados em inner para um determinado elemento de outer, a sequência de correspondências desse elemento estará vazia, mas ainda aparecerá nos resultados.

A função resultSelector é chamada apenas uma vez para cada elemento outer junto com uma coleção de todos os elementos inner que correspondem ao elemento outer. Isso difere do método Join no qual a função seletora de resultados é invocada em pares que contêm um elemento de outer e um elemento de inner.

GroupJoin preserva a ordem dos elementos de outere, para cada elemento de outer, a ordem dos elementos correspondentes de inner.

GroupJoin não tem equivalente direto em termos de banco de dados relacionais tradicionais. No entanto, esse método implementa um superconjunto de junções internas e junções externas esquerdas. Ambas as operações podem ser gravadas em termos de uma junção agrupada. Para obter mais informações, consulte Operações de junção.

Confira também

Aplica-se a

.NET 9 e outras versões
Produto Versões
.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 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0