Queryable.Join 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
일치하는 키를 기반으로 두 시퀀스의 요소 상관 관계를 지정합니다.
오버로드
| 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<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 구현에 따라 달라집니다. 예상되는 동작은 내부 조인의 동작입니다.
outerKeySelector 및 innerKeySelector 함수는 각각에서 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<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 구현에 따라 달라집니다. 예상되는 동작은 내부 조인의 동작입니다.
outerKeySelector 및 innerKeySelector 함수는 각각에서 outer 키를 추출하는 inner데 사용됩니다. 이러한 키는 을 사용하여 comparer같음으로 비교됩니다. 비교 결과는 .의 요소outer와 일치하는 각 요소에 inner 대해 일치하는 쌍을 만드는 데 사용됩니다.
resultSelector 그런 다음, 일치하는 각 요소 쌍의 결과 개체를 프로젝션하기 위해 함수가 호출됩니다.