Прочитать на английском

Поделиться через


Enumerable.Join Метод

Определение

Устанавливает корреляцию между элементами двух последовательностей на основе сопоставления ключей.

Перегрузки

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

Устанавливает корреляцию между элементами двух последовательностей на основе сопоставления ключей. Для сравнения ключей используется компаратор проверки на равенство по умолчанию.

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

Устанавливает корреляцию между элементами двух последовательностей на основе сопоставления ключей. Для сравнения ключей используется указанный компаратор IEqualityComparer<T>.

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

Исходный код:
Join.cs
Исходный код:
Join.cs
Исходный код:
Join.cs

Устанавливает корреляцию между элементами двух последовательностей на основе сопоставления ключей. Для сравнения ключей используется компаратор проверки на равенство по умолчанию.

C#
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);

Параметры типа

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>

Объект IEnumerable<T>, который содержит элементы типа TResult, полученные в результате внутреннего соединения двух последовательностей.

Исключения

Значение параметра outer, inner, outerKeySelector, innerKeySelector или resultSelectornull.

Примеры

В следующем примере кода показано, как использовать Join<TOuter,TInner,TKey,TResult>(IEnumerable<TOuter>, IEnumerable<TInner>, Func<TOuter,TKey>, Func<TInner,TKey>, Func<TOuter,TInner,TResult>) для выполнения внутреннего соединения двух последовательностей на основе общего ключа.

C#
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
*/

Комментарии

Этот метод реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в котором хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется, пока объект не будет перечислен либо путем вызова его GetEnumerator метода напрямую, либо с помощью foreach в C# или For Each в Visual Basic.

Функция сравнения Defaultна равенство по умолчанию используется для хэширования и сравнения ключей.

Соединение относится к операции корреляции элементов двух источников информации на основе общего ключа. Join объединяет два источника информации и ключи, по которым они сопоставляются в одном вызове метода. Это отличается от использования SelectMany, который требует более одного вызова метода для выполнения одной и той же операции.

Join сохраняет порядок элементов outer, а для каждого из этих элементов — порядок соответствующих элементов inner.

В синтаксисе join выражения запроса предложение (C#) или Join (Visual Basic) преобразуется в вызов Join.

В терминах реляционной Join базы данных метод реализует внутреннее равное. "Inner" означает, что в результаты включаются только те элементы, которые имеют совпадение в другой последовательности. Равное соединение — это соединение, в котором сравниваются ключи на равенство. Операция левого внешнего соединения не имеет выделенного стандартного оператора запроса, но может быть выполнена GroupJoin с помощью метода . Дополнительные сведения см. в разделе Операции соединения.

См. также раздел

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

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

Исходный код:
Join.cs
Исходный код:
Join.cs
Исходный код:
Join.cs

Устанавливает корреляцию между элементами двух последовательностей на основе сопоставления ключей. Для сравнения ключей используется указанный компаратор IEqualityComparer<T>.

C#
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);
C#
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);

Параметры типа

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>

Объект IEnumerable<T>, который содержит элементы типа TResult, полученные в результате внутреннего соединения двух последовательностей.

Исключения

Значение параметра outer, inner, outerKeySelector, innerKeySelector или resultSelectornull.

Комментарии

Этот метод реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в котором хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется, пока объект не будет перечислен либо путем вызова его GetEnumerator метода напрямую, либо с помощью foreach в C# или For Each в Visual Basic.

Если comparer имеет значение null, для хэширования и сравнения ключей используется средство сравнения Defaultна равенство по умолчанию.

Соединение относится к операции корреляции элементов двух источников информации на основе общего ключа. Join объединяет два источника информации и ключи, по которым они сопоставляются в одном вызове метода. Это отличается от использования SelectMany, который требует более одного вызова метода для выполнения одной и той же операции.

Join сохраняет порядок элементов outer, а для каждого из этих элементов — порядок соответствующих элементов inner.

В терминах реляционной Join базы данных метод реализует внутреннее равное. "Inner" означает, что в результаты включаются только те элементы, которые имеют совпадение в другой последовательности. Равное соединение — это соединение, в котором сравниваются ключи на равенство. Операция левого внешнего соединения не имеет выделенного стандартного оператора запроса, но может быть выполнена GroupJoin с помощью метода . Дополнительные сведения см. в разделе Операции соединения.

См. также раздел

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0