信息
您所需的主题如下所示。但此主题未包含在此库中。

Enumerable.GroupBy<TSource, TKey, TElement, TResult> 方法 (IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>, Func<TKey, IEnumerable<TElement>, TResult>)

2013/12/13

根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值。 通过使用指定的函数对每个组的元素进行投影。

Namespace:  System.Linq
程序集:  System.Core(位于 System.Core.dll 中)

public static IEnumerable<TResult> GroupBy<TSource, TKey, TElement, TResult>(
	this IEnumerable<TSource> source,
	Func<TSource, TKey> keySelector,
	Func<TSource, TElement> elementSelector,
	Func<TKey, IEnumerable<TElement>, TResult> resultSelector
)

类型参数

TSource

source 中的元素的类型。

TKey

keySelector 返回的键的类型。

TElement

每个 IGrouping<TKey, TElement> 中的元素的类型。

TResult

resultSelector 返回的结果值的类型。

参数

source
类型: System.Collections.Generic.IEnumerable<TSource>
要对其元素进行分组的 IEnumerable<T>
keySelector
类型: System.Func<TSource, TKey>
用于提取每个元素的键的函数。
elementSelector
类型: System.Func<TSource, TElement>
用于将每个源元素映射到 IGrouping<TKey, TElement> 中的元素的函数。
resultSelector
类型: System.Func<TKey, IEnumerable<TElement>, TResult>
用于从每个组中创建结果值的函数。

返回值

类型: System.Collections.Generic.IEnumerable<TResult>
TResult 类型的元素的集合,其中每个元素都表示对一个组及其键的投影。

用法说明

在 Visual Basic 和 C# 中,您可以对类型为 IEnumerable<TSource> 的任何对象调用此方法作为实例方法。使用实例方法语法来调用此方法时,忽略第一个参数。

在查询表达式语法中,group by (Visual C#) 或 Group By Into (Visual Basic) 子句转换为 Enumerable.GroupBy 的调用。

下面的代码示例演示如何使用 GroupBy<TSource, TKey, TElement, TResult>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>, 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.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)
         {
            outputBlock.Text += "\nAge group: " + result.Key + "\n";
            outputBlock.Text += "Number of pets in this age group: " + result.Count + "\n";
            outputBlock.Text += "Minimum age: " + result.Min + "\n";
            outputBlock.Text += "Maximum age: " + result.Max + "\n";
         }

         /*  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
         */
      }



Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示: