本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

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> 方法會實作內部等聯結。 「 內部 」 表示另一個序列中有符合的元素會包含在結果。 等聯結 ' 是聯結中的索引鍵比較是否相等。 左方外部聯結作業有沒有專用的標準查詢運算子,但可使用來執行 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 起供應
回到頁首
顯示: