本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

Enumerable.Join<TOuter, TInner, TKey, TResult> 方法 (IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner, TResult>)

 

基于匹配键对两个序列的元素关联。 使用默认的相等比较器对键进行比较。

命名空间:   System.Linq
程序集:  System.Core(位于 System.Core.dll)

public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(
	this IEnumerable<TOuter> outer,
	IEnumerable<TInner> inner,
	Func<TOuter, TKey> outerKeySelector,
	Func<TInner, TKey> innerKeySelector,
	Func<TOuter, TInner, TResult> resultSelector
)

参数

outer
Type: System.Collections.Generic.IEnumerable<TOuter>

要联接的第一个序列。

inner
Type: System.Collections.Generic.IEnumerable<TInner>

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

outerKeySelector
Type: System.Func<TOuter, TKey>

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

innerKeySelector
Type: System.Func<TInner, TKey>

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

resultSelector
Type: System.Func<TOuter, TInner, TResult>

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

返回值

Type: System.Collections.Generic.IEnumerable<TResult>

IEnumerable<T> ,其类型的元素 TResult 通过对两个序列执行内部联接获得的。

类型参数

TOuter

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

TInner

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

TKey

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

TResult

结果元素的类型。

Exception Condition
ArgumentNullException

outerinnerouterKeySelectorinnerKeySelectorresultSelectornull

此方法实现通过使用延迟的执行。 最接近的返回值是指存储执行的操作所需的所有信息的对象。 此方法所表示的查询不执行之前调用枚举的对象及其 GetEnumerator 方法直接或通过使用 foreach 中 Visual C# 或 For Each 中 Visual Basic。

默认的相等比较, Default, ,用于执行哈希,并对键进行比较。

联接是指相互关联的基于一个公用密钥信息的两个源元素的操作。 Join<TOuter, TInner, TKey, TResult> 提供了两个信息源和依据它们相匹配在一个方法调用中的键。 这不同于使用 SelectMany, ,这需要多个方法调用来执行相同的操作。

Join<TOuter, TInner, TKey, TResult> 保留的元素的顺序 outer, ,对于每个这些元素中,匹配的元素的顺序 inner

在查询表达式语法 join (Visual C#) 或 Join (Visual Basic) 子句转换为的一个调用 Join<TOuter, TInner, TKey, TResult>

在关系数据库术语 Join<TOuter, TInner, TKey, TResult> 方法实现内部的同等联接。 内部意味着在结果中包含其他序列中具有匹配项的元素。 同等联接是一种联接在对键进行比较的相等性。 左外部联接操作的 A 有没有专用的标准查询运算符,但可以通过执行 GroupJoin<TOuter, TInner, TKey, TResult> 方法。 请参阅Join Operations

下面的代码示例演示如何使用 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
*/

通用 Windows 平台
自 8 起可用
.NET Framework
自 3.5 起可用
可移植类库
可移植 .NET 平台 中受支持
Silverlight
自 2.0 起可用
Windows Phone Silverlight
自 7.0 起可用
Windows Phone
自 8.1 起可用
返回页首
显示: