Queryable.GroupJoin Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Correlaciona os elementos de duas sequências com base na igualdade de chave e agrupa os resultados.
Sobrecargas
| Name | Description |
|---|---|
| GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) |
Correlaciona os elementos de duas sequências com base na igualdade de chave e agrupa os resultados. O comparador de igualdade por defeito é usado para comparar chaves. |
| GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<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 especificado IEqualityComparer<T> é usado para comparar tonalidades. |
GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>)
Correlaciona os elementos de duas sequências com base na igualdade de chave e agrupa os resultados. O comparador de igualdade por defeito é usado para comparar chaves.
public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Linq::IQueryable<TResult> ^ GroupJoin(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, System::Collections::Generic::IEnumerable<TInner> ^, TResult> ^> ^ resultSelector);
public static System.Linq.IQueryable<TResult> GroupJoin<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,System.Collections.Generic.IEnumerable<TInner>,TResult>> resultSelector);
static member GroupJoin : System.Linq.IQueryable<'Outer> * seq<'Inner> * System.Linq.Expressions.Expression<Func<'Outer, 'Key>> * System.Linq.Expressions.Expression<Func<'Inner, 'Key>> * System.Linq.Expressions.Expression<Func<'Outer, seq<'Inner>, 'Result>> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function GroupJoin(Of TOuter, TInner, TKey, TResult) (outer As IQueryable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Expression(Of Func(Of TOuter, TKey)), innerKeySelector As Expression(Of Func(Of TInner, TKey)), resultSelector As Expression(Of Func(Of TOuter, IEnumerable(Of TInner), TResult))) As IQueryable(Of TResult)
Parâmetros de Tipo Genérico
- TOuter
O tipo dos elementos da primeira sequência.
- TInner
O tipo dos elementos da segunda sequência.
- TKey
O tipo das teclas devolvidas pelas funções seletoras de teclas.
- TResult
O tipo dos elementos resultantes.
Parâmetros
- outer
- IQueryable<TOuter>
A primeira sequência a juntar-se.
- inner
- IEnumerable<TInner>
A sequência a juntar à primeira sequência.
- outerKeySelector
- Expression<Func<TOuter,TKey>>
Uma função para extrair a chave de junção de cada elemento da primeira sequência.
- innerKeySelector
- Expression<Func<TInner,TKey>>
Uma função para extrair a chave de junção de cada elemento da segunda sequência.
- resultSelector
- Expression<Func<TOuter,IEnumerable<TInner>,TResult>>
Uma função para criar um elemento resultante a partir de um elemento da primeira sequência e uma coleção de elementos correspondentes da segunda sequência.
Devoluções
Um IQueryable<T> que contém elementos do tipo TResult obtido ao realizar 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 seguinte demonstra como usar GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) para realizar 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 that are owned by them.
var query =
people.AsQueryable().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
Shared 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 list where each element is an anonymous
' type that contains a person's name and a collection
' of the names of the pets that are owned by them.
Dim query = _
people.AsQueryable().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(String.Format("{0}:", obj.OwnerName))
' Output each of the owner's pet's names.
For Each pet As String In obj.Pets
output.AppendLine(String.Format(" {0}", pet))
Next
Next
' Display the output.
MsgBox(output.ToString())
End Sub
' This code produces the following output:
' Hedlund, Magnus:
' Daisy
' Adams, Terry:
' Barley
' Boots
' Weiss, Charlotte:
' Whiskers
Observações
Este método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para estes parâmetros, pode-se passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.
O GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>,
Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>,
Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) método gera um MethodCallExpression que representa o autodenominado GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>,
Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>,
Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) como um método genérico construído. Depois passa o MethodCallExpression para o CreateQuery<TElement>(Expression) método de o IQueryProvider representado pela Provider propriedade do outer parâmetro.
O comportamento de consulta que ocorre como resultado da execução de uma árvore de expressões que representa a chamada GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>,
Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>,
Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) depende da implementação do tipo do outer parâmetro. O comportamento esperado é que as outerKeySelector funções e innerKeySelector sejam usadas para extrair chaves de outer e inner, respetivamente. Estas chaves são comparadas para igualdade, de modo a corresponder cada elemento em outer com zero ou mais elementos de inner. Depois, a resultSelector função é invocada para projetar um objeto resultado de cada grupo de elementos correlacionados.
Aplica-se a
GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<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 especificado IEqualityComparer<T> é usado para comparar tonalidades.
public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Linq::IQueryable<TResult> ^ GroupJoin(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, System::Collections::Generic::IEnumerable<TInner> ^, TResult> ^> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Linq.IQueryable<TResult> GroupJoin<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,System.Collections.Generic.IEnumerable<TInner>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
static member GroupJoin : System.Linq.IQueryable<'Outer> * seq<'Inner> * System.Linq.Expressions.Expression<Func<'Outer, 'Key>> * System.Linq.Expressions.Expression<Func<'Inner, 'Key>> * System.Linq.Expressions.Expression<Func<'Outer, seq<'Inner>, 'Result>> * System.Collections.Generic.IEqualityComparer<'Key> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function GroupJoin(Of TOuter, TInner, TKey, TResult) (outer As IQueryable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Expression(Of Func(Of TOuter, TKey)), innerKeySelector As Expression(Of Func(Of TInner, TKey)), resultSelector As Expression(Of Func(Of TOuter, IEnumerable(Of TInner), TResult)), comparer As IEqualityComparer(Of TKey)) As IQueryable(Of TResult)
Parâmetros de Tipo Genérico
- TOuter
O tipo dos elementos da primeira sequência.
- TInner
O tipo dos elementos da segunda sequência.
- TKey
O tipo das teclas devolvidas pelas funções seletoras de teclas.
- TResult
O tipo dos elementos resultantes.
Parâmetros
- outer
- IQueryable<TOuter>
A primeira sequência a juntar-se.
- inner
- IEnumerable<TInner>
A sequência a juntar à primeira sequência.
- outerKeySelector
- Expression<Func<TOuter,TKey>>
Uma função para extrair a chave de junção de cada elemento da primeira sequência.
- innerKeySelector
- Expression<Func<TInner,TKey>>
Uma função para extrair a chave de junção de cada elemento da segunda sequência.
- resultSelector
- Expression<Func<TOuter,IEnumerable<TInner>,TResult>>
Uma função para criar um elemento resultante a partir de um elemento da primeira sequência e uma coleção de elementos correspondentes da segunda sequência.
- comparer
- IEqualityComparer<TKey>
Um comparador para chaves de hash e comparação.
Devoluções
Um IQueryable<T> que contém elementos do tipo TResult obtido ao realizar uma junção agrupada em duas sequências.
Exceções
outer ou inner ou outerKeySelector ou innerKeySelector ou resultSelector é null.
Observações
Este método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para estes parâmetros, pode-se passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.
O GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>,
Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>,
Expression<Func<TOuter,IEnumerable<TInner>,TResult>>, IEqualityComparer<TKey>) método gera um MethodCallExpression que representa o autodenominado GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>,
Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>,
Expression<Func<TOuter,IEnumerable<TInner>,TResult>>, IEqualityComparer<TKey>) como um método genérico construído. Depois passa o MethodCallExpression para o CreateQuery<TElement>(Expression) método de o IQueryProvider representado pela Provider propriedade do outer parâmetro.
O comportamento de consulta que ocorre como resultado da execução de uma árvore de expressões que representa a chamada GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>,
Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>,
Expression<Func<TOuter,IEnumerable<TInner>,TResult>>, IEqualityComparer<TKey>) depende da implementação do tipo do outer parâmetro. O comportamento esperado é que as outerKeySelector funções e innerKeySelector sejam usadas para extrair chaves de outer e inner, respetivamente. Estas chaves são comparadas para igualdade usando comparer. O resultado das comparações é usado para corresponder cada elemento em outer com zero ou mais elementos de inner. Depois, a resultSelector função é invocada para projetar um objeto resultado de cada grupo de elementos correlacionados.