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


Enumerable.UnionBy Метод

Определение

Перегрузки

Имя Описание
UnionBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TSource>, Func<TSource,TKey>)

Создает объединение наборов двух последовательностей в соответствии с указанной функцией селектора ключей.

UnionBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Создает объединение наборов двух последовательностей в соответствии с указанной функцией селектора ключей.

UnionBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TSource>, Func<TSource,TKey>)

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

Создает объединение наборов двух последовательностей в соответствии с указанной функцией селектора ключей.

public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TSource> ^ UnionBy(System::Collections::Generic::IEnumerable<TSource> ^ first, System::Collections::Generic::IEnumerable<TSource> ^ second, Func<TSource, TKey> ^ keySelector);
public static System.Collections.Generic.IEnumerable<TSource> UnionBy<TSource,TKey>(this System.Collections.Generic.IEnumerable<TSource> first, System.Collections.Generic.IEnumerable<TSource> second, Func<TSource,TKey> keySelector);
static member UnionBy : seq<'Source> * seq<'Source> * Func<'Source, 'Key> -> seq<'Source>
<Extension()>
Public Function UnionBy(Of TSource, TKey) (first As IEnumerable(Of TSource), second As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey)) As IEnumerable(Of TSource)

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

TSource

Тип элементов входных последовательностей.

TKey

Тип ключа для идентификации элементов.

Параметры

first
IEnumerable<TSource>

IEnumerable<T> Чей отдельный элемент формирует первый набор для объединения.

second
IEnumerable<TSource>

Отдельные IEnumerable<T> элементы которого образуют второй набор для объединения.

keySelector
Func<TSource,TKey>

Функция для извлечения ключа для каждого элемента.

Возвращаемое значение

IEnumerable<TSource>

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

Исключения

first или second есть null.

Примеры

В следующем примере показано, как объединить UnionBy две коллекции объектов при исключении дубликатов на основе определенного свойства.

public static void UnionByKeySelectorExample()
{
    (int ProductId, string Name , decimal Price)[] localProducts =
    {
        (101, "Laptop", 1000m),                 
        (102, "Mouse", 100m),
        (103, "Keyboard", 120m)
    };

    (int ProductId, string Name, decimal Price)[] warehouseProducts =
    {
        (102, "Mouse", 100m),      // Duplicate ProductId (already in local)
        (104, "Monitor", 800m),
        (101, "Laptop", 1000m)     // Duplicate ProductId (already in local)
    };
    var combinedProducts =
        localProducts.UnionBy(
            warehouseProducts,
            product => product.ProductId
        );

    foreach (var product in combinedProducts)
    {
        Console.WriteLine($"{product.ProductId}: {product.Name} - ${product.Price}");
    }

    /*
    This code produces the following output:

    101: Laptop - $1000
    102: Mouse - $100
    103: Keyboard - $120
    104: Monitor - $800
    */
}

Комментарии

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

Сравнение Defaultравенства по умолчанию используется для сравнения значений.

При перечислении объекта, возвращаемого этим методом, UnionBy перечисляет first и second в этом порядке и возвращает каждый элемент, который еще не был возвращен.

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

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

UnionBy<TSource,TKey>(IEnumerable<TSource>, IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

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

Создает объединение наборов двух последовательностей в соответствии с указанной функцией селектора ключей.

public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TSource> ^ UnionBy(System::Collections::Generic::IEnumerable<TSource> ^ first, System::Collections::Generic::IEnumerable<TSource> ^ second, Func<TSource, TKey> ^ keySelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Collections.Generic.IEnumerable<TSource> UnionBy<TSource,TKey>(this System.Collections.Generic.IEnumerable<TSource> first, System.Collections.Generic.IEnumerable<TSource> second, Func<TSource,TKey> keySelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member UnionBy : seq<'Source> * seq<'Source> * Func<'Source, 'Key> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<'Source>
<Extension()>
Public Function UnionBy(Of TSource, TKey) (first As IEnumerable(Of TSource), second As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), comparer As IEqualityComparer(Of TKey)) As IEnumerable(Of TSource)

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

TSource

Тип элементов входных последовательностей.

TKey

Тип ключа для идентификации элементов.

Параметры

first
IEnumerable<TSource>

IEnumerable<T> Чей отдельный элемент формирует первый набор для объединения.

second
IEnumerable<TSource>

Отдельные IEnumerable<T> элементы которого образуют второй набор для объединения.

keySelector
Func<TSource,TKey>

Функция для извлечения ключа для каждого элемента.

comparer
IEqualityComparer<TKey>

Для сравнения значений IEqualityComparer<T> .

Возвращаемое значение

IEnumerable<TSource>

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

Исключения

first или second есть null.

Примеры

В следующем примере показано, как объединить UnionBy две коллекции при использовании пользовательского сравнения, чтобы игнорировать конфиденциальность регистра при проверке повторяющихся ключей.

public static void UnionByComparerExample()
{
    (string Email, string FullName)[] marketingList =
    {
        ("Mahmoud.Doe@example.com", "Mahmoud Doe"),
        ("alice.smith@example.com", "Alice Smith")
    };

    (string Email, string FullName)[] salesList =
    {
        ("ALICE.SMITH@EXAMPLE.COM", "Alice S."), // Duplicate email, different casing
        ("Sara.jones@example.com", "Sara Jones")
    };

    var combinedList =
        marketingList.UnionBy(
            salesList,
            contact => contact.Email,
            StringComparer.OrdinalIgnoreCase
        );

    foreach (var contact in combinedList)
    {
        Console.WriteLine($"{contact.FullName} ({contact.Email})");
    }

    /*
    This code produces the following output:

    Mahmoud Doe (Mahmoud.Doe@example.com)
    Alice Smith (alice.smith@example.com)
    Sara Jones (Sara.jones@example.com)
    */
}

Комментарии

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

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

При перечислении объекта, возвращаемого этим методом, UnionBy перечисляет first и second в этом порядке и возвращает каждый элемент, который еще не был возвращен.

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

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