Queryable.GroupJoin Méthode

Définition

Met en corrélation les éléments de deux séquences en fonction de l'égalité des clés et regroupe les résultats.Correlates the elements of two sequences based on key equality and groups the results.

Surcharges

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

Met en corrélation les éléments de deux séquences en fonction de l'égalité des clés et regroupe les résultats.Correlates the elements of two sequences based on key equality and groups the results. Le comparateur d'égalité par défaut est utilisé pour comparer les clés.The default equality comparer is used to compare keys.

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>)

Met en corrélation les éléments de deux séquences en fonction de l'égalité des clés et regroupe les résultats.Correlates the elements of two sequences based on key equality and groups the results. Un IEqualityComparer<T> spécifié est utilisé pour comparer les clés.A specified IEqualityComparer<T> is used to compare keys.

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

Met en corrélation les éléments de deux séquences en fonction de l'égalité des clés et regroupe les résultats.Correlates the elements of two sequences based on key equality and groups the results. Le comparateur d'égalité par défaut est utilisé pour comparer les clés.The default equality comparer is used to compare keys.

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)

Paramètres de type

TOuter

Type des éléments de la première séquence.The type of the elements of the first sequence.

TInner

Type des éléments de la deuxième séquence.The type of the elements of the second sequence.

TKey

Type des clés retournées par les fonctions de sélecteur de clé.The type of the keys returned by the key selector functions.

TResult

Type des éléments de résultat.The type of the result elements.

Paramètres

outer
IQueryable<TOuter>

Première séquence à joindre.The first sequence to join.

inner
IEnumerable<TInner>

Séquence à joindre à la première séquence.The sequence to join to the first sequence.

outerKeySelector
Expression<Func<TOuter,TKey>>

Fonction permettant d'extraire la clé de jointure de chaque élément de la première séquence.A function to extract the join key from each element of the first sequence.

innerKeySelector
Expression<Func<TInner,TKey>>

Fonction permettant d'extraire la clé de jointure de chaque élément de la deuxième séquence.A function to extract the join key from each element of the second sequence.

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

Fonction permettant de créer un élément de résultat à partir d’un élément de la première séquence, ainsi qu’une collection d’éléments correspondants à partir de la deuxième séquence.A function to create a result element from an element from the first sequence and a collection of matching elements from the second sequence.

Retours

IQueryable<TResult>

IQueryable<T> qui contient des éléments de type TResult obtenus en exécutant une jointure groupée sur deux séquences.An IQueryable<T> that contains elements of type TResult obtained by performing a grouped join on two sequences.

Exceptions

outer ou inner ou outerKeySelector ou innerKeySelector ou resultSelector est null.outer or inner or outerKeySelector or innerKeySelector or resultSelector is null.

Exemples

L’exemple de code suivant montre comment utiliser GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) pour effectuer une jointure groupée sur deux séquences.The following code example demonstrates how to use GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) to perform a grouped join on two sequences.

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

Remarques

Cette méthode a au moins un paramètre de type Expression<TDelegate> dont l’argument de type est l’un des Func<T,TResult> types.This method has at least one parameter of type Expression<TDelegate> whose type argument is one of the Func<T,TResult> types. Pour ces paramètres, vous pouvez passer une expression lambda et elle sera compilée dans un Expression<TDelegate> .For these parameters, you can pass in a lambda expression and it will be compiled to an Expression<TDelegate>.

La GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) méthode génère un MethodCallExpression qui représente l’appel de GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) lui-même comme une méthode générique construite.The GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) method generates a MethodCallExpression that represents calling GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) itself as a constructed generic method. Il passe ensuite MethodCallExpression à la CreateQuery<TElement>(Expression) méthode de IQueryProvider représenté par la Provider propriété du outer paramètre.It then passes the MethodCallExpression to the CreateQuery<TElement>(Expression) method of the IQueryProvider represented by the Provider property of the outer parameter.

Le comportement de la requête qui se produit suite à l’exécution d’une arborescence d’expressions qui représente l’appel de GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) dépend de l’implémentation du type du outer paramètre.The query behavior that occurs as a result of executing an expression tree that represents calling GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) depends on the implementation of the type of the outer parameter. Le comportement attendu est que les outerKeySelector innerKeySelector fonctions et sont utilisées pour extraire des clés de outer et inner , respectivement.The expected behavior is that the outerKeySelector and innerKeySelector functions are used to extract keys from outer and inner, respectively. Ces clés sont comparées pour que l’égalité corresponde à chaque élément de outer avec zéro, un ou plusieurs éléments de inner .These keys are compared for equality to match each element in outer with zero or more elements from inner. La resultSelector fonction est ensuite appelée pour projeter un objet de résultat à partir de chaque groupe d’éléments corrélés.Then the resultSelector function is invoked to project a result object from each group of correlated elements.

S’applique à

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>)

Met en corrélation les éléments de deux séquences en fonction de l'égalité des clés et regroupe les résultats.Correlates the elements of two sequences based on key equality and groups the results. Un IEqualityComparer<T> spécifié est utilisé pour comparer les clés.A specified IEqualityComparer<T> is used to compare keys.

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);
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)

Paramètres de type

TOuter

Type des éléments de la première séquence.The type of the elements of the first sequence.

TInner

Type des éléments de la deuxième séquence.The type of the elements of the second sequence.

TKey

Type des clés retournées par les fonctions de sélecteur de clé.The type of the keys returned by the key selector functions.

TResult

Type des éléments de résultat.The type of the result elements.

Paramètres

outer
IQueryable<TOuter>

Première séquence à joindre.The first sequence to join.

inner
IEnumerable<TInner>

Séquence à joindre à la première séquence.The sequence to join to the first sequence.

outerKeySelector
Expression<Func<TOuter,TKey>>

Fonction permettant d'extraire la clé de jointure de chaque élément de la première séquence.A function to extract the join key from each element of the first sequence.

innerKeySelector
Expression<Func<TInner,TKey>>

Fonction permettant d'extraire la clé de jointure de chaque élément de la deuxième séquence.A function to extract the join key from each element of the second sequence.

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

Fonction permettant de créer un élément de résultat à partir d’un élément de la première séquence, ainsi qu’une collection d’éléments correspondants à partir de la deuxième séquence.A function to create a result element from an element from the first sequence and a collection of matching elements from the second sequence.

comparer
IEqualityComparer<TKey>

Comparateur pour hacher et comparer des clés.A comparer to hash and compare keys.

Retours

IQueryable<TResult>

IQueryable<T> qui contient des éléments de type TResult obtenus en exécutant une jointure groupée sur deux séquences.An IQueryable<T> that contains elements of type TResult obtained by performing a grouped join on two sequences.

Exceptions

outer ou inner ou outerKeySelector ou innerKeySelector ou resultSelector est null.outer or inner or outerKeySelector or innerKeySelector or resultSelector is null.

Remarques

Cette méthode a au moins un paramètre de type Expression<TDelegate> dont l’argument de type est l’un des Func<T,TResult> types.This method has at least one parameter of type Expression<TDelegate> whose type argument is one of the Func<T,TResult> types. Pour ces paramètres, vous pouvez passer une expression lambda et elle sera compilée dans un Expression<TDelegate> .For these parameters, you can pass in a lambda expression and it will be compiled to an Expression<TDelegate>.

La 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éthode génère un MethodCallExpression qui représente l’appel de 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>) lui-même comme une méthode générique construite.The 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>) method generates a MethodCallExpression that represents calling 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>) itself as a constructed generic method. Il passe ensuite MethodCallExpression à la CreateQuery<TElement>(Expression) méthode de IQueryProvider représenté par la Provider propriété du outer paramètre.It then passes the MethodCallExpression to the CreateQuery<TElement>(Expression) method of the IQueryProvider represented by the Provider property of the outer parameter.

Le comportement de la requête qui se produit suite à l’exécution d’une arborescence d’expressions qui représente l’appel de 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>) dépend de l’implémentation du type du outer paramètre.The query behavior that occurs as a result of executing an expression tree that represents calling 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>) depends on the implementation of the type of the outer parameter. Le comportement attendu est que les outerKeySelector innerKeySelector fonctions et sont utilisées pour extraire des clés de outer et inner , respectivement.The expected behavior is that the outerKeySelector and innerKeySelector functions are used to extract keys from outer and inner, respectively. Ces clés sont comparées pour déterminer leur égalité à l’aide de comparer .These keys are compared for equality by using comparer. Le résultat des comparaisons est utilisé pour faire correspondre chaque élément dans outer avec zéro, un ou plusieurs éléments de inner .The outcome of the comparisons is used to match each element in outer with zero or more elements from inner. La resultSelector fonction est ensuite appelée pour projeter un objet de résultat à partir de chaque groupe d’éléments corrélés.Then the resultSelector function is invoked to project a result object from each group of correlated elements.

S’applique à