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

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


Queryable.GroupBy Метод

Определение

Группирует элементы последовательности.

Перегрузки

GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>)

Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа. Ключи сравниваются с помощью указанного компаратора, элементы каждой группы проецируются с помощью указанной функции.

GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>)

Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа. Элементы каждой группы проецируются с помощью указанной функции.

GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>)

Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и проецирует элементы каждой группы с помощью указанной функции.

GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>)

Группирует элементы последовательности и проецирует элементы каждой группы с помощью указанной функции. Значения ключей сравниваются с использованием заданного компаратора.

GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>)

Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа.

GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>)

Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа. Ключи сравниваются с использованием заданного компаратора.

GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>)

Группирует элементы последовательности в соответствии с заданной функцией селектора ключа.

GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>)

Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и сравнивает ключи с помощью указанного компаратора.

GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>)

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

Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа. Ключи сравниваются с помощью указанного компаратора, элементы каждой группы проецируются с помощью указанной функции.

public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);

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

TSource

Тип элементов source.

TKey

Тип ключа, возвращаемого функцией, заданной параметром keySelector.

TElement

Тип элементов каждого объекта IGrouping<TKey,TElement>.

TResult

Тип результирующего значения, возвращаемого функцией resultSelector.

Параметры

source
IQueryable<TSource>

Объект IQueryable<T>, элементы которого следует сгруппировать.

keySelector
Expression<Func<TSource,TKey>>

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

elementSelector
Expression<Func<TSource,TElement>>

Функция, сопоставляющая каждый исходный элемент с элементом объекта IGrouping<TKey,TElement>.

resultSelector
Expression<Func<TKey,IEnumerable<TElement>,TResult>>

Функция для создания результирующего значения для каждой группы.

comparer
IEqualityComparer<TKey>

Компаратор IEqualityComparer<T>, используемый для сравнения ключей.

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

IQueryable<TResult>

Объект T:System.Linq.IQueryable`1 , имеющий аргумент TResult типа и , где каждый элемент представляет проекцию на группу и ее ключ.

Исключения

Значение параметра source, keySelector, elementSelector, resultSelector или comparernull.

Комментарии

Этот метод имеет по крайней мере один параметр типа Expression<TDelegate> , аргумент типа которого является одним из Func<T,TResult> типов. Для этих параметров можно передать лямбда-выражение, и оно будет скомпилировано Expression<TDelegate>в .

Метод GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>) создает объект , MethodCallExpression представляющий вызов GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>) как сконструированный универсальный метод. Затем он передает в MethodCallExpressionCreateQuery<TElement>(Expression) метод объекта , IQueryProvider представленный свойством Providersource параметра .

Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>, IEqualityComparer<TKey>) , зависит от реализации типа source параметра. Ожидаемое поведение заключается в source том, что элементы группируются по значениям ключей, которые получаются путем вызова keySelector для каждого элемента. Параметр comparer используется для сравнения значений ключей. Параметр elementSelector используется для проецирования элементов каждой группы, а resultSelector параметр используется для получения значения результата из каждой группы и ее ключа.

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

Продукт Версии

GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>)

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

Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа. Элементы каждой группы проецируются с помощью указанной функции.

public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult>> resultSelector);

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

TSource

Тип элементов source.

TKey

Тип ключа, возвращаемого функцией, заданной параметром keySelector.

TElement

Тип элементов каждого объекта IGrouping<TKey,TElement>.

TResult

Тип результирующего значения, возвращаемого функцией resultSelector.

Параметры

source
IQueryable<TSource>

Объект IQueryable<T>, элементы которого следует сгруппировать.

keySelector
Expression<Func<TSource,TKey>>

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

elementSelector
Expression<Func<TSource,TElement>>

Функция, сопоставляющая каждый исходный элемент с элементом объекта IGrouping<TKey,TElement>.

resultSelector
Expression<Func<TKey,IEnumerable<TElement>,TResult>>

Функция для создания результирующего значения для каждой группы.

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

IQueryable<TResult>

Объект T:System.Linq.IQueryable`1 , имеющий аргумент TResult типа и , где каждый элемент представляет проекцию на группу и ее ключ.

Исключения

Значение параметра source или keySelector или elementSelector или resultSelectornull.

Примеры

В следующем примере кода показано, как использовать для GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>) группировки элементов последовательности и проецирования последовательности результатов типа TResult.

class Pet
{
    public string Name { get; set; }
    public double Age { get; set; }
}

public static void GroupByEx4()
{
    // Create a list of pets.
    List<Pet> petsList =
        new List<Pet>{ new Pet { Name="Barley", Age=8.3 },
                       new Pet { Name="Boots", Age=4.9 },
                       new Pet { Name="Whiskers", Age=1.5 },
                       new Pet { Name="Daisy", Age=4.3 } };

    // Group Pet.Age values by the Math.Floor of the age.
    // Then project an anonymous type from each group
    // that consists of the key, the count of the group's
    // elements, and the minimum and maximum age in the group.
    var query = petsList.AsQueryable().GroupBy(
        pet => Math.Floor(pet.Age),
        pet => pet.Age,
        (baseAge, ages) => new
        {
            Key = baseAge,
            Count = ages.Count(),
            Min = ages.Min(),
            Max = ages.Max()
        });

    // Iterate over each anonymous type.
    foreach (var result in query)
    {
        Console.WriteLine("\nAge group: " + result.Key);
        Console.WriteLine("Number of pets in this age group: " + result.Count);
        Console.WriteLine("Minimum age: " + result.Min);
        Console.WriteLine("Maximum age: " + result.Max);
    }

    /*  This code produces the following output:

        Age group: 8
        Number of pets in this age group: 1
        Minimum age: 8.3
        Maximum age: 8.3

        Age group: 4
        Number of pets in this age group: 2
        Minimum age: 4.3
        Maximum age: 4.9

        Age group: 1
        Number of pets in this age group: 1
        Minimum age: 1.5
        Maximum age: 1.5
    */
}

Комментарии

Этот метод имеет по крайней мере один параметр типа Expression<TDelegate> , аргумент типа которого является одним из Func<T,TResult> типов. Для этих параметров можно передать лямбда-выражение, и оно будет скомпилировано Expression<TDelegate>в .

Метод GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>) создает объект , MethodCallExpression представляющий вызов GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>) как сконструированный универсальный метод. Затем он передает в MethodCallExpressionCreateQuery<TElement>(Expression) метод объекта , IQueryProvider представленный свойством Providersource параметра .

Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов GroupBy<TSource,TKey,TElement,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TSource,TElement>>, Expression<Func<TKey, IEnumerable<TElement>,TResult>>) , зависит от реализации типа source параметра. Ожидаемое поведение заключается в source том, что элементы группируются по значениям ключей, которые получаются путем вызова keySelector для каждого элемента. Параметр elementSelector используется для проецирования элементов каждой группы, а resultSelector параметр используется для получения значения результата из каждой группы и ее ключа.

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

Продукт Версии

GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>)

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

Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и проецирует элементы каждой группы с помощью указанной функции.

public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector);

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

TSource

Тип элементов source.

TKey

Тип ключа, возвращаемого функцией, заданной параметром keySelector.

TElement

Тип элементов каждого объекта IGrouping<TKey,TElement>.

Параметры

source
IQueryable<TSource>

Объект IQueryable<T>, элементы которого следует сгруппировать.

keySelector
Expression<Func<TSource,TKey>>

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

elementSelector
Expression<Func<TSource,TElement>>

Функция, сопоставляющая каждый исходный элемент с элементом объекта IGrouping<TKey,TElement>.

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

IQueryable<IGrouping<TKey,TElement>>

В IQueryable<IGrouping<TKey, TElement>> C# или IQueryable(Of IGrouping(Of TKey, TElement)) в Visual Basic, где каждый IGrouping<TKey,TElement> содержит последовательность объектов типа TElement и ключ.

Исключения

Параметр source, keySelector или elementSelector имеет значение null.

Примеры

В следующем примере кода показано, как использовать для GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) группировки элементов последовательности.

class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void GroupByEx2()
{
    // Create a list of Pet objects.
    List<Pet> pets =
        new List<Pet>{ new Pet { Name="Barley", Age=8 },
                       new Pet { Name="Boots", Age=4 },
                       new Pet { Name="Whiskers", Age=1 },
                       new Pet { Name="Daisy", Age=4 } };

    // Group the pets using Pet.Age as the key.
    // Use Pet.Name as the value for each entry.
    IEnumerable<IGrouping<int, string>> query =
        pets.AsQueryable().GroupBy(pet => pet.Age, pet => pet.Name);

    // Iterate over each IGrouping in the collection.
    foreach (IGrouping<int, string> petGroup in query)
    {
        // Print the key value of the IGrouping.
        Console.WriteLine(petGroup.Key);
        // Iterate over each value in the
        // IGrouping and print the value.
        foreach (string name in petGroup)
            Console.WriteLine("  {0}", name);
    }
}

/*
    This code produces the following output:

    8
      Barley
    4
      Boots
      Daisy
    1
      Whiskers
*/

Комментарии

Этот метод имеет по крайней мере один параметр типа Expression<TDelegate> , аргумент типа которого является одним из Func<T,TResult> типов. Для этих параметров можно передать лямбда-выражение, и оно будет скомпилировано Expression<TDelegate>в .

Метод GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) создает объект , MethodCallExpression представляющий вызов GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) как сконструированный универсальный метод. Затем он передает в MethodCallExpressionCreateQuery<TElement>(Expression) метод объекта , IQueryProvider представленный свойством Providersource параметра .

Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>) , зависит от реализации типа source параметра. Ожидаемое поведение заключается в source том, что элементы группируется по значению ключа, полученному путем вызова keySelector для каждого элемента. Он вызывает elementSelector для каждого элемента, чтобы получить результирующий элемент.

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

Продукт Версии

GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>)

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

Группирует элементы последовательности и проецирует элементы каждой группы с помощью указанной функции. Значения ключей сравниваются с использованием заданного компаратора.

public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TSource,TElement>> elementSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);

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

TSource

Тип элементов source.

TKey

Тип ключа, возвращаемого функцией, заданной параметром keySelector.

TElement

Тип элементов каждого объекта IGrouping<TKey,TElement>.

Параметры

source
IQueryable<TSource>

Объект IQueryable<T>, элементы которого следует сгруппировать.

keySelector
Expression<Func<TSource,TKey>>

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

elementSelector
Expression<Func<TSource,TElement>>

Функция, сопоставляющая каждый исходный элемент с элементом объекта IGrouping<TKey,TElement>.

comparer
IEqualityComparer<TKey>

Компаратор IEqualityComparer<T>, используемый для сравнения ключей.

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

IQueryable<IGrouping<TKey,TElement>>

В IQueryable<IGrouping<TKey, TElement>> C# или IQueryable(Of IGrouping(Of TKey, TElement)) в Visual Basic, где каждый IGrouping<TKey,TElement> содержит последовательность объектов типа TElement и ключ.

Исключения

Значение параметра source или keySelector или elementSelector или comparernull.

Комментарии

Этот метод имеет по крайней мере один параметр типа Expression<TDelegate> , аргумент типа которого является одним из Func<T,TResult> типов. Для этих параметров можно передать лямбда-выражение, и оно будет скомпилировано Expression<TDelegate>в .

Метод GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>) создает объект , MethodCallExpression представляющий вызов GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>) как сконструированный универсальный метод. Затем он передает в MethodCallExpressionCreateQuery<TElement>(Expression) метод объекта , IQueryProvider представленный свойством Providersource параметра .

Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов GroupBy<TSource,TKey,TElement>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TSource,TElement>>, IEqualityComparer<TKey>) , зависит от реализации типа source параметра. Ожидаемое поведение заключается в source том, что элементы группируется по значению ключа, полученному путем вызова keySelector для каждого элемента. Значения ключей сравниваются с помощью comparer. Параметр elementSelector вызывается для каждого элемента для получения элемента результата.

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

Продукт Версии

GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>)

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

Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа.

public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult>> resultSelector);

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

TSource

Тип элементов source.

TKey

Тип ключа, возвращаемого функцией, заданной параметром keySelector.

TResult

Тип результирующего значения, возвращаемого функцией resultSelector.

Параметры

source
IQueryable<TSource>

Объект IQueryable<T>, элементы которого следует сгруппировать.

keySelector
Expression<Func<TSource,TKey>>

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

resultSelector
Expression<Func<TKey,IEnumerable<TSource>,TResult>>

Функция для создания результирующего значения для каждой группы.

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

IQueryable<TResult>

Объект T:System.Linq.IQueryable`1 , имеющий аргумент TResult типа и , где каждый элемент представляет проекцию на группу и ее ключ.

Исключения

Параметр source, keySelector или resultSelector имеет значение null.

Примеры

В следующем примере кода показано, как использовать для GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) группировки элементов последовательности и проецирования последовательности результатов типа TResult.

class Pet
{
    public string Name { get; set; }
    public double Age { get; set; }
}

public static void GroupByEx3()
{
    // Create a list of pets.
    List<Pet> petsList =
        new List<Pet>{ new Pet { Name="Barley", Age=8.3 },
                       new Pet { Name="Boots", Age=4.9 },
                       new Pet { Name="Whiskers", Age=1.5 },
                       new Pet { Name="Daisy", Age=4.3 } };

    // Group Pet objects by the Math.Floor of their age.
    // Then project an anonymous type from each group
    // that consists of the key, the count of the group's
    // elements, and the minimum and maximum age in the group.
    var query = petsList.AsQueryable().GroupBy(
        pet => Math.Floor(pet.Age),
        (age, pets) => new
        {
            Key = age,
            Count = pets.Count(),
            Min = pets.Min(pet => pet.Age),
            Max = pets.Max(pet => pet.Age)
        });

    // Iterate over each anonymous type.
    foreach (var result in query)
    {
        Console.WriteLine("\nAge group: " + result.Key);
        Console.WriteLine("Number of pets in this age group: " + result.Count);
        Console.WriteLine("Minimum age: " + result.Min);
        Console.WriteLine("Maximum age: " + result.Max);
    }

    /*  This code produces the following output:

        Age group: 8
        Number of pets in this age group: 1
        Minimum age: 8.3
        Maximum age: 8.3

        Age group: 4
        Number of pets in this age group: 2
        Minimum age: 4.3
        Maximum age: 4.9

        Age group: 1
        Number of pets in this age group: 1
        Minimum age: 1.5
        Maximum age: 1.5
    */
}

Комментарии

Этот метод имеет по крайней мере один параметр типа Expression<TDelegate> , аргумент типа которого является одним из Func<T,TResult> типов. Для этих параметров можно передать лямбда-выражение, и оно будет скомпилировано Expression<TDelegate>в .

Метод GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) создает объект , MethodCallExpression представляющий вызов GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) как сконструированный универсальный метод. Затем он передает в MethodCallExpressionCreateQuery<TElement>(Expression) метод объекта , IQueryProvider представленный свойством Providersource параметра .

Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>) , зависит от реализации типа source параметра. Ожидаемое поведение заключается в source том, что элементы группируется по значению ключа, полученному путем вызова keySelector для каждого элемента. Параметр resultSelector используется для получения результирующих значений из каждой группы и ее ключа.

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

Продукт Версии

GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>)

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

Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа. Ключи сравниваются с использованием заданного компаратора.

public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Linq.IQueryable<TResult> GroupBy<TSource,TKey,TResult> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Linq.Expressions.Expression<Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult>> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);

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

TSource

Тип элементов source.

TKey

Тип ключа, возвращаемого функцией, заданной параметром keySelector.

TResult

Тип результирующего значения, возвращаемого функцией resultSelector.

Параметры

source
IQueryable<TSource>

Объект IQueryable<T>, элементы которого следует сгруппировать.

keySelector
Expression<Func<TSource,TKey>>

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

resultSelector
Expression<Func<TKey,IEnumerable<TSource>,TResult>>

Функция для создания результирующего значения для каждой группы.

comparer
IEqualityComparer<TKey>

Компаратор IEqualityComparer<T>, используемый для сравнения ключей.

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

IQueryable<TResult>

Объект T:System.Linq.IQueryable`1 , имеющий аргумент TResult типа и , где каждый элемент представляет проекцию на группу и ее ключ.

Исключения

Значение параметра source или keySelector или resultSelector или comparernull.

Комментарии

Этот метод имеет по крайней мере один параметр типа Expression<TDelegate> , аргумент типа которого является одним из Func<T,TResult> типов. Для этих параметров можно передать лямбда-выражение, и оно будет скомпилировано Expression<TDelegate>в .

Метод GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>) создает объект , MethodCallExpression представляющий вызов GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>) как сконструированный универсальный метод. Затем он передает в MethodCallExpressionCreateQuery<TElement>(Expression) метод объекта , IQueryProvider представленный свойством Providersource параметра .

Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов GroupBy<TSource,TKey,TResult>(IQueryable<TSource>, Expression<Func<TSource, TKey>>, Expression<Func<TKey,IEnumerable<TSource>,TResult>>, IEqualityComparer<TKey>) , зависит от реализации типа source параметра. Ожидаемое поведение заключается в source том, что элементы группируются по значениям ключей, которые получаются путем вызова keySelector для каждого элемента. Параметр comparer используется для сравнения ключей resultSelector , а параметр — для получения результирующих значений из каждой группы и ее ключа.

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

Продукт Версии

GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>)

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

Группирует элементы последовательности в соответствии с заданной функцией селектора ключа.

public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector);

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

TSource

Тип элементов source.

TKey

Тип ключа, возвращаемого функцией, заданной параметром keySelector.

Параметры

source
IQueryable<TSource>

Объект IQueryable<T>, элементы которого следует сгруппировать.

keySelector
Expression<Func<TSource,TKey>>

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

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

IQueryable<IGrouping<TKey,TSource>>

В IQueryable<IGrouping<TKey, TSource>> C# или IQueryable(Of IGrouping(Of TKey, TSource)) в Visual Basic, где каждый IGrouping<TKey,TElement> объект содержит последовательность объектов и ключ.

Исключения

Параметр source или keySelector имеет значение null.

Примеры

В следующем примере кода показано, как использовать для GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) группировки элементов последовательности.

class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void GroupByEx1()
{
    // Create a list of Pet objects.
    List<Pet> pets =
        new List<Pet>{ new Pet { Name="Barley", Age=8 },
                       new Pet { Name="Boots", Age=4 },
                       new Pet { Name="Whiskers", Age=1 },
                       new Pet { Name="Daisy", Age=4 } };

    // Group the pets using Pet.Age as the key.
    // Use Pet.Name as the value for each entry.
    var query = pets.AsQueryable().GroupBy(pet => pet.Age);

    // Iterate over each IGrouping in the collection.
    foreach (var ageGroup in query)
    {
        Console.WriteLine("Age group: {0}  Number of pets: {1}", ageGroup.Key, ageGroup.Count());
    }
}

/*
    This code produces the following output:

    Age group: 8  Number of pets: 1
    Age group: 4  Number of pets: 2
    Age group: 1  Number of pets: 1

*/

Комментарии

Этот метод имеет по крайней мере один параметр типа Expression<TDelegate> , аргумент типа которого является одним из Func<T,TResult> типов. Для этих параметров можно передать лямбда-выражение, и оно будет скомпилировано Expression<TDelegate>в .

Метод GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) создает объект , MethodCallExpression представляющий вызов GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) как сконструированный универсальный метод. Затем он передает в MethodCallExpressionCreateQuery<TElement>(Expression) метод объекта , IQueryProvider представленный свойством Providersource параметра .

Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) , зависит от реализации типа source параметра. Ожидаемое поведение заключается в source том, что элементы группируется по значению ключа, полученному путем вызова keySelector для каждого элемента.

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

Продукт Версии

GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>)

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

Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и сравнивает ключи с помощью указанного компаратора.

public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Linq.IQueryable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);

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

TSource

Тип элементов source.

TKey

Тип ключа, возвращаемого функцией, заданной параметром keySelector.

Параметры

source
IQueryable<TSource>

Объект IQueryable<T>, элементы которого следует сгруппировать.

keySelector
Expression<Func<TSource,TKey>>

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

comparer
IEqualityComparer<TKey>

Компаратор IEqualityComparer<T>, используемый для сравнения ключей.

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

IQueryable<IGrouping<TKey,TSource>>

В IQueryable<IGrouping<TKey, TSource>> C# или IQueryable(Of IGrouping(Of TKey, TSource)) в Visual Basic, где каждый содержит IGrouping<TKey,TElement> последовательность объектов и ключ.

Исключения

Параметр source, keySelector или comparer имеет значение null.

Комментарии

Этот метод имеет по крайней мере один параметр типа Expression<TDelegate> , аргумент типа которого является одним из Func<T,TResult> типов. Для этих параметров можно передать лямбда-выражение, и оно будет скомпилировано Expression<TDelegate>в .

Метод GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>) создает объект , MethodCallExpression представляющий вызов GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>) как сконструированный универсальный метод. Затем он передает в MethodCallExpressionCreateQuery<TElement>(Expression) метод объекта , IQueryProvider представленный свойством Providersource параметра .

Поведение запроса, возникающее в результате выполнения дерева выражений, представляющего вызов GroupBy<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IEqualityComparer<TKey>) , зависит от реализации типа source параметра. Ожидаемое поведение заключается в том, что элементы группируется source по значению ключа. Значение ключа получается путем вызова keySelector для каждого элемента, а значения ключа сравниваются с помощью comparer.

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

Продукт Версии