Queryable.GroupJoin Metódus

Definíció

Két sorozat elemeit korrelálja a kulcsegyenlőség alapján, és csoportosítja az eredményeket.

Túlterhelések

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

Két sorozat elemeit korrelálja a kulcsegyenlőség alapján, és csoportosítja az eredményeket. Az alapértelmezett egyenlőség-összehasonlító a kulcsok összehasonlítására szolgál.

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

Két sorozat elemeit korrelálja a kulcsegyenlőség alapján, és csoportosítja az eredményeket. A megadott IEqualityComparer<T> érték a kulcsok összehasonlítására szolgál.

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

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

Forrás:
Queryable.cs
Forrás:
Queryable.cs
Forrás:
Queryable.cs
Forrás:
Queryable.cs
Forrás:
Queryable.cs

Két sorozat elemeit korrelálja a kulcsegyenlőség alapján, és csoportosítja az eredményeket. Az alapértelmezett egyenlőség-összehasonlító a kulcsok összehasonlítására szolgál.

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);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")]
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>
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")>]
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)

Típusparaméterek

TOuter

Az első sorozat elemeinek típusa.

TInner

A második sorozat elemeinek típusa.

TKey

A kulcsválasztó függvények által visszaadott kulcsok típusa.

TResult

Az eredményelemek típusa.

Paraméterek

outer
IQueryable<TOuter>

Az első illesztendő sorozat.

inner
IEnumerable<TInner>

Az első sorozathoz illesztendő sorozat.

outerKeySelector
Expression<Func<TOuter,TKey>>

Egy függvény, amely kinyeri az illesztőkulcsot az első sorozat minden eleméből.

innerKeySelector
Expression<Func<TInner,TKey>>

Egy függvény, amely kinyeri az illesztőkulcsot a második sorozat minden eleméből.

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

Egy függvény, amely egy eredményelemet hoz létre az első sorozat egy eleméből, és egyező elemek gyűjteményét a második sorozatból.

Válaszok

IQueryable<TResult>

Olyan IQueryable<T> elemeket tartalmaz, amelyek egy csoportosított illesztés két sorozaton történő végrehajtásával nyert elemeket TResult tartalmaznak.

Attribútumok

Kivételek

outervagy inner vagy outerKeySelectorinnerKeySelectorresultSelector az.null

Példák

Az alábbi példakód bemutatja, hogyan lehet GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) csoportosított illesztéseket végrehajtani két sorozaton.

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

Megjegyzések

Ez a metódus legalább egy típusparamétert Expression<TDelegate> használ, amelynek típusargumentuma az Func<T,TResult> egyik típus. Ezekhez a paraméterekhez átadhat egy lambda kifejezést, és az Expression<TDelegate>egy .

A GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) metódus létrehoz egy olyan metódust MethodCallExpression , amely önmagát generált általános metódusként jeleníti GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) meg. Ezután átadja a MethodCallExpression paraméter tulajdonsága által CreateQuery<TElement>(Expression) képviselt metódusnak IQueryProviderProvider.outer

A meghívást GroupJoin<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,IEnumerable<TInner>,TResult>>) jelképező kifejezésfa végrehajtása során előforduló lekérdezési viselkedés a paraméter típusának outer implementálásától függ. A várt viselkedés az, hogy a függvények és outerKeySelector a innerKeySelector függvények a kulcsok outerinnerkinyerésére szolgálnak. Ezeket a kulcsokat a rendszer összehasonlítja az egyenlőség érdekében, hogy az egyes elemek outer nulla vagy több elemből innerállnak. Ezután a resultSelector függvény meghívódik, hogy eredményobjektumot vetítsen ki a korrelált elemek minden csoportjából.

A következőre érvényes:

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

Forrás:
Queryable.cs
Forrás:
Queryable.cs
Forrás:
Queryable.cs
Forrás:
Queryable.cs
Forrás:
Queryable.cs

Két sorozat elemeit korrelálja a kulcsegyenlőség alapján, és csoportosítja az eredményeket. A megadott IEqualityComparer<T> érték a kulcsok összehasonlítására szolgál.

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);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")]
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>
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")>]
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)

Típusparaméterek

TOuter

Az első sorozat elemeinek típusa.

TInner

A második sorozat elemeinek típusa.

TKey

A kulcsválasztó függvények által visszaadott kulcsok típusa.

TResult

Az eredményelemek típusa.

Paraméterek

outer
IQueryable<TOuter>

Az első illesztendő sorozat.

inner
IEnumerable<TInner>

Az első sorozathoz illesztendő sorozat.

outerKeySelector
Expression<Func<TOuter,TKey>>

Egy függvény, amely kinyeri az illesztőkulcsot az első sorozat minden eleméből.

innerKeySelector
Expression<Func<TInner,TKey>>

Egy függvény, amely kinyeri az illesztőkulcsot a második sorozat minden eleméből.

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

Egy függvény, amely egy eredményelemet hoz létre az első sorozat egy eleméből, és egyező elemek gyűjteményét a második sorozatból.

comparer
IEqualityComparer<TKey>

A kivonatok és a kulcsok összehasonlításának összehasonlítója.

Válaszok

IQueryable<TResult>

Olyan IQueryable<T> elemeket tartalmaz, amelyek egy csoportosított illesztés két sorozaton történő végrehajtásával nyert elemeket TResult tartalmaznak.

Attribútumok

Kivételek

outervagy inner vagy outerKeySelectorinnerKeySelectorresultSelector az.null

Megjegyzések

Ez a metódus legalább egy típusparamétert Expression<TDelegate> használ, amelynek típusargumentuma az Func<T,TResult> egyik típus. Ezekhez a paraméterekhez átadhat egy lambda kifejezést, és az Expression<TDelegate>egy .

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>) metódus létrehoz egy olyan metódust MethodCallExpression , amely önmagát generált általános metódusként jeleníti 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>) meg. Ezután átadja a MethodCallExpression paraméter tulajdonsága által CreateQuery<TElement>(Expression) képviselt metódusnak IQueryProviderProvider.outer

A meghívást 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>) jelképező kifejezésfa végrehajtása során előforduló lekérdezési viselkedés a paraméter típusának outer implementálásától függ. A várt viselkedés az, hogy a függvények és outerKeySelector a innerKeySelector függvények a kulcsok outerinnerkinyerésére szolgálnak. Ezeket a kulcsokat a rendszer összehasonlítja az egyenlőséghez a következő használatával comparer: . Az összehasonlítások eredménye az egyes elemek outer nullával vagy több elemével innervaló egyeztetésére szolgál. Ezután a resultSelector függvény meghívódik, hogy eredményobjektumot vetítsen ki a korrelált elemek minden csoportjából.

A következőre érvényes:

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

Forrás:
Queryable.cs
public static System.Linq.IQueryable<System.Linq.IGrouping<TOuter,TInner>> GroupJoin<TOuter,TInner,TKey>(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.Collections.Generic.IEqualityComparer<TKey>? comparer = default);
static member GroupJoin : System.Linq.IQueryable<'Outer> * seq<'Inner> * System.Linq.Expressions.Expression<Func<'Outer, 'Key>> * System.Linq.Expressions.Expression<Func<'Inner, 'Key>> * System.Collections.Generic.IEqualityComparer<'Key> -> System.Linq.IQueryable<System.Linq.IGrouping<'Outer, 'Inner>>
<Extension()>
Public Function GroupJoin(Of TOuter, TInner, TKey) (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)), Optional comparer As IEqualityComparer(Of TKey) = Nothing) As IQueryable(Of IGrouping(Of TOuter, TInner))

Típusparaméterek

TOuter
TInner
TKey

Paraméterek

outer
IQueryable<TOuter>
inner
IEnumerable<TInner>
outerKeySelector
Expression<Func<TOuter,TKey>>
innerKeySelector
Expression<Func<TInner,TKey>>
comparer
IEqualityComparer<TKey>

Válaszok

IQueryable<IGrouping<TOuter,TInner>>

A következőre érvényes: