다음을 통해 공유


Queryable.Join 메서드

정의

일치하는 키를 기반으로 두 시퀀스의 요소 상관 관계를 지정합니다.

오버로드

Name Description
Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>)

일치하는 키를 기반으로 두 시퀀스의 요소 상관 관계를 지정합니다. 기본 같음 비교자는 키를 비교하는 데 사용됩니다.

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

일치하는 키를 기반으로 두 시퀀스의 요소 상관 관계를 지정합니다. 지정된 IEqualityComparer<T> 키를 비교하는 데 사용됩니다.

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

Source:
Queryable.cs
Source:
Queryable.cs
Source:
Queryable.cs
Source:
Queryable.cs
Source:
Queryable.cs

일치하는 키를 기반으로 두 시퀀스의 요소 상관 관계를 지정합니다. 기본 같음 비교자는 키를 비교하는 데 사용됩니다.

public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IQueryable<TResult> ^ Join(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, TInner, TResult> ^> ^ resultSelector);
public static System.Linq.IQueryable<TResult> Join<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,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> Join<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,TInner,TResult>> resultSelector);
static member Join : 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, '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 Join : 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, 'Inner, 'Result>> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function Join(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, TInner, TResult))) As IQueryable(Of TResult)

형식 매개 변수

TOuter

첫 번째 시퀀스의 요소 형식입니다.

TInner

두 번째 시퀀스의 요소 형식입니다.

TKey

키 선택기 함수에서 반환하는 키의 형식입니다.

TResult

결과 요소의 형식입니다.

매개 변수

outer
IQueryable<TOuter>

조인할 첫 번째 시퀀스입니다.

inner
IEnumerable<TInner>

첫 번째 시퀀스에 조인할 시퀀스입니다.

outerKeySelector
Expression<Func<TOuter,TKey>>

첫 번째 시퀀스의 각 요소에서 조인 키를 추출하는 함수입니다.

innerKeySelector
Expression<Func<TInner,TKey>>

두 번째 시퀀스의 각 요소에서 조인 키를 추출하는 함수입니다.

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

일치하는 두 요소에서 결과 요소를 만드는 함수입니다.

반환

IQueryable<TResult>

IQueryable<T> 두 시퀀스에서 내부 조인을 수행하여 가져온 형식 TResult 의 요소가 있는 요소입니다.

특성

예외

outer 또는 inner 또는 outerKeySelector 또는 innerKeySelectorresultSelector 입니다 null.

예제

다음 코드 예제에서는 공통 키를 기반으로 두 시퀀스의 내부 조인을 수행하는 방법을 Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>) 보여 줍니다.

class Person
{
    public string Name { get; set; }
}

class Pet
{
    public string Name { get; set; }
    public Person Owner { get; set; }
}

public static void JoinEx1()
{
    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 };

    // Join the list of Person objects and the list of Pet objects
    // to create a list of person-pet pairs where each element is
    // an anonymous type that contains the name of pet and the name
    // of the person that owns the pet.
    var query = people.AsQueryable().Join(pets,
                    person => person,
                    pet => pet.Owner,
                    (person, pet) =>
                        new { OwnerName = person.Name, Pet = pet.Name });

    foreach (var obj in query)
    {
        Console.WriteLine(
            "{0} - {1}",
            obj.OwnerName,
            obj.Pet);
    }
}

/*
    This code produces the following output:

    Hedlund, Magnus - Daisy
    Adams, Terry - Barley
    Adams, Terry - 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 JoinEx1()
    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})

    ' Join the list of Person objects and the list of Pet objects 
    ' to create a list of person-pet pairs where each element is 
    ' an anonymous type that contains pet's name and the name of the
    ' Person object that owns the pet.
    Dim query = people.AsQueryable().Join(pets, _
                    Function(person) person, _
                    Function(pet) pet.Owner, _
                    Function(person, pet) _
                        New With {.OwnerName = person.Name, .Pet = pet.Name})

    Dim output As New System.Text.StringBuilder
    For Each obj In query
        output.AppendLine(String.Format( _
            "{0} - {1}", obj.OwnerName, obj.Pet))
    Next

    ' Display the output.
    MsgBox(output.ToString())
End Sub

' This code produces the following output:

' Hedlund, Magnus - Daisy
' Adams, Terry - Barley
' Adams, Terry - Boots
' Weiss, Charlotte - Whiskers

설명

이 메서드에는 형식 인수가 형식 Expression<TDelegate> 중 하나인 형식의 매개 변수가 Func<T,TResult> 하나 이상 있습니다. 이러한 매개 변수의 경우 람다 식을 전달할 수 있으며 이 식은 .로 컴파일됩니다 Expression<TDelegate>.

메서드는 Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>) 생성된 제네릭 메서드로 자신을 호출 Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>) 하는 것을 나타내는 메서드를 생성 MethodCallExpression 합니다. 그런 다음 매개 변수의 IQueryProvider 속성 outer 이 나타내는 메서드에 Provider 전달 MethodCallExpressionCreateQuery<TElement>(Expression) 합니다.

호출 Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>) 을 나타내는 식 트리를 실행한 결과로 발생하는 쿼리 동작은 매개 변수 형식의 outer 구현에 따라 달라집니다. 예상되는 동작은 내부 조인의 동작입니다. outerKeySelectorinnerKeySelector 함수는 각각에서 outer 키를 추출하는 inner데 사용됩니다. 이러한 키는 각 시퀀스의 요소와 일치하도록 같음으로 비교됩니다. 요소 쌍은 에 있는 요소와 일치하는 각 요소에 inner 대해 저장됩니다 outer. resultSelector 그런 다음, 일치하는 각 요소 쌍의 결과 개체를 프로젝션하기 위해 함수가 호출됩니다.

적용 대상

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

Source:
Queryable.cs
Source:
Queryable.cs
Source:
Queryable.cs
Source:
Queryable.cs
Source:
Queryable.cs

일치하는 키를 기반으로 두 시퀀스의 요소 상관 관계를 지정합니다. 지정된 IEqualityComparer<T> 키를 비교하는 데 사용됩니다.

public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IQueryable<TResult> ^ Join(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, TInner, TResult> ^> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Linq.IQueryable<TResult> Join<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,TInner,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Linq.IQueryable<TResult> Join<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,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> Join<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,TInner,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member Join : 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, '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 Join : 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, 'Inner, 'Result>> * System.Collections.Generic.IEqualityComparer<'Key> -> System.Linq.IQueryable<'Result>
<Extension()>
Public Function Join(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, TInner, TResult)), comparer As IEqualityComparer(Of TKey)) As IQueryable(Of TResult)

형식 매개 변수

TOuter

첫 번째 시퀀스의 요소 형식입니다.

TInner

두 번째 시퀀스의 요소 형식입니다.

TKey

키 선택기 함수에서 반환하는 키의 형식입니다.

TResult

결과 요소의 형식입니다.

매개 변수

outer
IQueryable<TOuter>

조인할 첫 번째 시퀀스입니다.

inner
IEnumerable<TInner>

첫 번째 시퀀스에 조인할 시퀀스입니다.

outerKeySelector
Expression<Func<TOuter,TKey>>

첫 번째 시퀀스의 각 요소에서 조인 키를 추출하는 함수입니다.

innerKeySelector
Expression<Func<TInner,TKey>>

두 번째 시퀀스의 각 요소에서 조인 키를 추출하는 함수입니다.

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

일치하는 두 요소에서 결과 요소를 만드는 함수입니다.

comparer
IEqualityComparer<TKey>

IEqualityComparer<T> 키를 해시하고 비교할 수 있습니다.

반환

IQueryable<TResult>

IQueryable<T> 두 시퀀스에서 내부 조인을 수행하여 가져온 형식 TResult 의 요소가 있는 요소입니다.

특성

예외

outer 또는 inner 또는 outerKeySelector 또는 innerKeySelectorresultSelector 입니다 null.

설명

이 메서드에는 형식 인수가 형식 Expression<TDelegate> 중 하나인 형식의 매개 변수가 Func<T,TResult> 하나 이상 있습니다. 이러한 매개 변수의 경우 람다 식을 전달할 수 있으며 이 식은 .로 컴파일됩니다 Expression<TDelegate>.

메서드는 Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>, IEqualityComparer<TKey>) 생성된 제네릭 메서드로 자신을 호출 Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>, IEqualityComparer<TKey>) 하는 것을 나타내는 메서드를 생성 MethodCallExpression 합니다. 그런 다음 매개 변수의 IQueryProvider 속성 outer 이 나타내는 메서드에 Provider 전달 MethodCallExpressionCreateQuery<TElement>(Expression) 합니다.

호출 Join<TOuter,TInner,TKey,TResult>(IQueryable<TOuter>, IEnumerable<TInner>, Expression<Func<TOuter,TKey>>, Expression<Func<TInner,TKey>>, Expression<Func<TOuter,TInner,TResult>>, IEqualityComparer<TKey>) 을 나타내는 식 트리를 실행한 결과로 발생하는 쿼리 동작은 매개 변수 형식의 outer 구현에 따라 달라집니다. 예상되는 동작은 내부 조인의 동작입니다. outerKeySelectorinnerKeySelector 함수는 각각에서 outer 키를 추출하는 inner데 사용됩니다. 이러한 키는 을 사용하여 comparer같음으로 비교됩니다. 비교 결과는 .의 요소outer와 일치하는 각 요소에 inner 대해 일치하는 쌍을 만드는 데 사용됩니다. resultSelector 그런 다음, 일치하는 각 요소 쌍의 결과 개체를 프로젝션하기 위해 함수가 호출됩니다.

적용 대상