Enumerable.GroupJoin Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Correlaciona os elementos de duas sequências com base na igualdade de chaves 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 chaves 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.
public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ GroupJoin(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);
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);
static member GroupJoin : seq<'Outer> * seq<'Inner> * Func<'Outer, 'Key> * Func<'Inner, 'Key> * Func<'Outer, seq<'Inner>, 'Result> -> seq<'Result>
<Extension()>
Public Function GroupJoin(Of TOuter, TInner, TKey, TResult) (outer As IEnumerable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Func(Of TOuter, TKey), innerKeySelector As Func(Of TInner, TKey), resultSelector As Func(Of TOuter, IEnumerable(Of TInner), TResult)) As IEnumerable(Of TResult)
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 de seletor de chave.
- TResult
O tipo dos elementos de resultado.
Parâmetros
- outer
- IEnumerable<TOuter>
A primeira sequência a ser ingressada.
- inner
- IEnumerable<TInner>
A sequência a ser ingressada à 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
Um IEnumerable<T> que contém elementos do tipo TResult
obtidos pela execução de 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.
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
*/
Structure Person
Public Name As String
End Structure
Structure Pet
Public Name As String
Public Owner As Person
End Structure
Sub GroupJoinEx1()
Dim magnus As New Person With {.Name = "Hedlund, Magnus"}
Dim terry As New Person With {.Name = "Adams, Terry"}
Dim charlotte As New Person With {.Name = "Weiss, Charlotte"}
Dim barley As New Pet With {.Name = "Barley", .Owner = terry}
Dim boots As New Pet With {.Name = "Boots", .Owner = terry}
Dim whiskers As New Pet With {.Name = "Whiskers", .Owner = charlotte}
Dim daisy As New Pet With {.Name = "Daisy", .Owner = magnus}
Dim people As New List(Of Person)(New Person() {magnus, terry, charlotte})
Dim pets As New List(Of Pet)(New Pet() {barley, boots, whiskers, daisy})
' Create a collection 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.
Dim query =
people.GroupJoin(pets,
Function(person) person,
Function(pet) pet.Owner,
Function(person, petCollection) _
New With {.OwnerName = person.Name,
.Pets = petCollection.Select(
Function(pet) pet.Name)})
Dim output As New System.Text.StringBuilder
For Each obj In query
' Output the owner's name.
output.AppendLine(obj.OwnerName & ":")
' Output each of the owner's pet's names.
For Each pet As String In obj.Pets
output.AppendLine(" " & pet)
Next
Next
' Display the output.
Console.WriteLine(output.ToString)
End Sub
' 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 retornado 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 GetEnumerator
método 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 os elementos de outer
são emparelhados com coleções de elementos correspondentes de inner
. GroupJoin
permite basear os 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 para esse elemento estará vazia, mas ainda aparecerá nos resultados.
A resultSelector
função é chamada apenas uma vez para cada outer
elemento junto com uma coleção de todos os inner
elementos que correspondem ao outer
elemento. Isso difere do Join método , 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 outer
e 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 à esquerda. 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 join ... into
cláusula (C#) ou Group Join
(Visual Basic) é convertida em uma invocação de GroupJoin.
Confira também
- Operações de junção (C#)
- Operações de junção (Visual Basic)
- Cláusula join (Referência de C#)
- Cláusula Join Group (Visual Basic)
Aplica-se a
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 chaves e agrupa os resultados. Um IEqualityComparer<T> especificado é usado para comparar chaves.
public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ GroupJoin(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);
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);
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);
static member GroupJoin : seq<'Outer> * seq<'Inner> * Func<'Outer, 'Key> * Func<'Inner, 'Key> * Func<'Outer, seq<'Inner>, 'Result> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<'Result>
<Extension()>
Public Function GroupJoin(Of TOuter, TInner, TKey, TResult) (outer As IEnumerable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Func(Of TOuter, TKey), innerKeySelector As Func(Of TInner, TKey), resultSelector As Func(Of TOuter, IEnumerable(Of TInner), TResult), comparer As IEqualityComparer(Of TKey)) As IEnumerable(Of TResult)
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 de seletor de chave.
- TResult
O tipo dos elementos de resultado.
Parâmetros
- outer
- IEnumerable<TOuter>
A primeira sequência a ser ingressada.
- inner
- IEnumerable<TInner>
A sequência a ser ingressada à 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> para executar hash e comparar chaves.
Retornos
Um IEnumerable<T> que contém elementos do tipo TResult
obtidos pela execução de 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 retornado 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 GetEnumerator
método 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 os elementos de outer
são emparelhados com coleções de elementos correspondentes de inner
. GroupJoin
permite basear os 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 para esse elemento estará vazia, mas ainda aparecerá nos resultados.
A resultSelector
função é chamada apenas uma vez para cada outer
elemento junto com uma coleção de todos os inner
elementos que correspondem ao outer
elemento. Isso difere do Join método 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 outer
e 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 à esquerda. 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.