Enumerable.Join 方法

定义

根据匹配键关联两个序列的元素。

重载

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

Source:
Join.cs
Source:
Join.cs
Source:
Join.cs
Source:
Join.cs
Source:
Join.cs

根据匹配键关联两个序列的元素。 默认相等比较器用于比较键。

public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ Join(System::Collections::Generic::IEnumerable<TOuter> ^ outer, System::Collections::Generic::IEnumerable<TInner> ^ inner, Func<TOuter, TKey> ^ outerKeySelector, Func<TInner, TKey> ^ innerKeySelector, Func<TOuter, TInner, TResult> ^ resultSelector);
public static System.Collections.Generic.IEnumerable<TResult> Join<TOuter,TInner,TKey,TResult>(this System.Collections.Generic.IEnumerable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, Func<TOuter,TKey> outerKeySelector, Func<TInner,TKey> innerKeySelector, Func<TOuter,TInner,TResult> resultSelector);
static member Join : seq<'Outer> * seq<'Inner> * Func<'Outer, 'Key> * Func<'Inner, 'Key> * Func<'Outer, 'Inner, 'Result> -> seq<'Result>
<Extension()>
Public Function Join(Of TOuter, TInner, TKey, TResult) (outer As IEnumerable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Func(Of TOuter, TKey), innerKeySelector As Func(Of TInner, TKey), resultSelector As Func(Of TOuter, TInner, TResult)) As IEnumerable(Of TResult)

类型参数

TOuter

第一个序列的元素的类型。

TInner

第二个序列的元素的类型。

TKey

键选择器函数返回的键的类型。

TResult

结果元素的类型。

参数

outer
IEnumerable<TOuter>

要联接的第一个序列。

inner
IEnumerable<TInner>

要联接到第一个序列的序列。

outerKeySelector
Func<TOuter,TKey>

一个函数,用于从第一个序列的每个元素中提取联接键。

innerKeySelector
Func<TInner,TKey>

一个函数,用于从第二个序列的每个元素中提取联接键。

resultSelector
Func<TOuter,TInner,TResult>

用于从两个匹配元素创建结果元素的函数。

返回

IEnumerable<TResult>

具有通过对两个序列执行内部联接获取的类型TResult元素的元素IEnumerable<T>

例外

outer或或innerouterKeySelectorinnerKeySelectorresultSelectornull

示例

下面的代码示例演示如何根据 Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, 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 };

    // Create a list of Person-Pet pairs where
    // each element is an anonymous type that contains a
    // Pet's name and the name of the Person that owns the Pet.
    var query =
        people.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

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

    ' Create a list of Person-Pet pairs, where each element is an
    ' anonymous type that contains a Pet's name and the name of the
    ' Person that owns the Pet.
    Dim query =
people.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(obj.OwnerName & " - " & obj.Pet)
    Next

    ' Display the output.
    Console.WriteLine(output.ToString)
End Sub

' This code produces the following output:
'
' Hedlund, Magnus - Daisy
' Adams, Terry - Barley
' Adams, Terry - Boots
' Weiss, Charlotte - Whiskers

注解

此方法是使用延迟执行实现的。 即时返回值是一个对象,用于存储执行操作所需的所有信息。 除非通过直接调用其 GetEnumerator 方法或在 C# 中使用 foreach 或在 Visual Basic 中使用 For Each 来枚举对象,否则不会执行此方法表示的查询。

默认相等比较器 Default用于对键进行哈希和比较。

联接是指根据公用键关联两个信息源的元素的操作。 Join 将两个信息源和密钥一起匹配在一个方法调用中。 这与使用 SelectMany不同,这需要多个方法调用来执行相同的操作。

Join 保留元素的顺序 outer以及其中每个元素的匹配元素 inner的顺序。

在查询表达式语法中,join (C#) 或 Join (Visual Basic) 子句转换为调用 Join

在关系数据库术语中,该方法 Join 实现内部等数。 “Inner”表示结果中仅包含与其他序列中具有匹配项的元素。 “等联接”是一个联接,其中键与相等性进行比较。 左外部联接操作没有专用的标准查询运算符,但可以使用该方法执行 GroupJoin 。 有关详细信息,请参阅 “联接”操作

另请参阅

适用于

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

Source:
Join.cs
Source:
Join.cs
Source:
Join.cs
Source:
Join.cs
Source:
Join.cs

根据匹配键关联两个序列的元素。 指定的 IEqualityComparer<T> 用于比较键。

public:
generic <typename TOuter, typename TInner, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ Join(System::Collections::Generic::IEnumerable<TOuter> ^ outer, System::Collections::Generic::IEnumerable<TInner> ^ inner, Func<TOuter, TKey> ^ outerKeySelector, Func<TInner, TKey> ^ innerKeySelector, Func<TOuter, TInner, TResult> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Collections.Generic.IEnumerable<TResult> Join<TOuter,TInner,TKey,TResult>(this System.Collections.Generic.IEnumerable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, Func<TOuter,TKey> outerKeySelector, Func<TInner,TKey> innerKeySelector, Func<TOuter,TInner,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Collections.Generic.IEnumerable<TResult> Join<TOuter,TInner,TKey,TResult>(this System.Collections.Generic.IEnumerable<TOuter> outer, System.Collections.Generic.IEnumerable<TInner> inner, Func<TOuter,TKey> outerKeySelector, Func<TInner,TKey> innerKeySelector, Func<TOuter,TInner,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member Join : seq<'Outer> * seq<'Inner> * Func<'Outer, 'Key> * Func<'Inner, 'Key> * Func<'Outer, 'Inner, 'Result> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<'Result>
<Extension()>
Public Function Join(Of TOuter, TInner, TKey, TResult) (outer As IEnumerable(Of TOuter), inner As IEnumerable(Of TInner), outerKeySelector As Func(Of TOuter, TKey), innerKeySelector As Func(Of TInner, TKey), resultSelector As Func(Of TOuter, TInner, TResult), comparer As IEqualityComparer(Of TKey)) As IEnumerable(Of TResult)

类型参数

TOuter

第一个序列的元素的类型。

TInner

第二个序列的元素的类型。

TKey

键选择器函数返回的键的类型。

TResult

结果元素的类型。

参数

outer
IEnumerable<TOuter>

要联接的第一个序列。

inner
IEnumerable<TInner>

要联接到第一个序列的序列。

outerKeySelector
Func<TOuter,TKey>

一个函数,用于从第一个序列的每个元素中提取联接键。

innerKeySelector
Func<TInner,TKey>

一个函数,用于从第二个序列的每个元素中提取联接键。

resultSelector
Func<TOuter,TInner,TResult>

用于从两个匹配元素创建结果元素的函数。

comparer
IEqualityComparer<TKey>

一个 IEqualityComparer<T> 哈希和比较键。

返回

IEnumerable<TResult>

具有通过对两个序列执行内部联接获取的类型TResult元素的元素IEnumerable<T>

例外

outer或或innerouterKeySelectorinnerKeySelectorresultSelectornull

注解

此方法是使用延迟执行实现的。 即时返回值是一个对象,用于存储执行操作所需的所有信息。 除非通过直接调用其 GetEnumerator 方法或在 C# 中使用 foreach 或在 Visual Basic 中使用 For Each 来枚举对象,否则不会执行此方法表示的查询。

null如果是comparer,则使用默认相等比较器Default对键进行哈希和比较。

联接是指根据公用键关联两个信息源的元素的操作。 Join 将两个信息源和密钥一起匹配在一个方法调用中。 这与使用 SelectMany不同,这需要多个方法调用来执行相同的操作。

Join 保留元素的顺序 outer以及其中每个元素的匹配元素 inner的顺序。

在关系数据库术语中,该方法 Join 实现内部等数。 “Inner”表示结果中仅包含与其他序列中具有匹配项的元素。 “等联接”是一个联接,其中键与相等性进行比较。 左外部联接操作没有专用的标准查询运算符,但可以使用该方法执行 GroupJoin 。 有关详细信息,请参阅 “联接”操作

另请参阅

适用于