• Queryable.GroupBy<TSource, TKey> 方法 (IQueryable<TSource>, Expression<Func<TSource, TKey>>) 转



    根据指定的键选择器函数对序列中的元素进行分组。

     

    命名空间:  System.Linq
    程序集:  System.Core(在 System.Core.dll 中)

     
    public static IQueryable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(
    	this IQueryable<TSource> source,
    	Expression<Func<TSource, TKey>> keySelector
    )
    
    

    类型参数

    TSource

    source 中的元素的类型。

    TKey

     keySelector 表示的函数返回的键类型。

    参数

    source
    类型:System.Linq.IQueryable<TSource>
    要对其元素进行分组的 IQueryable<T>
    keySelector
    类型:System.Linq.Expressions.Expression<Func<TSource, TKey>>
    用于提取每个元素的键的函数。

    返回值

    类型:System.Linq.IQueryable<IGrouping<TKey, TSource>>
    在 C# 中为 IQueryable<IGrouping<TKey, TSource>>,或者在 Visual Basic 中为 IQueryable(Of IGrouping(Of TKey, TSource)),其中每个 IGrouping<TKey, TElement> 对象都包含一个对象序列和一个键。

    使用说明

    在 Visual Basic 和 C# 中,可以在 IQueryable<TSource> 类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时,请省略第一个参数。有关更多信息,请参见扩展方法 (Visual Basic)扩展方法(C# 编程指南)
    异常条件
    ArgumentNullException

    source  keySelector  null

    此方法至少有一个 Expression<TDelegate> 类型的实参,其形参类型是 Func<T, TResult> 类型之一。 对于这些参数,您可以 lambda 表达式形式传递,并且该表达式将被编译为 Expression<TDelegate>

    GroupBy<TSource, TKey>(IQueryable<TSource>, Expression<Func<TSource, TKey>>) 方法生成 MethodCallExpression,表示调用 GroupBy<TSource, TKey>(IQueryable<TSource>, Expression<Func<TSource, TKey>>) 自身作为构造的泛型方法。 然后,它将 MethodCallExpression 传递给 IQueryProvider  CreateQuery<TElement>(Expression) 方法,由 source 参数的 Provider 属性表示。

    因执行表示调用 GroupBy<TSource, TKey>(IQueryable<TSource>, Expression<Func<TSource, TKey>>) 的表达式目录树而发生的查询行为取决于 source 参数类型的实现。 预期的行为是根据键值对 source 中的元素进行分组,而键值是通过对每个元素调用 keySelector 获得的。

    下面的代码示例演示如何使用 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
    
                */
    
    
    
    

    .NET Framework

    受以下版本支持:4.5、4、3.5

    .NET Framework Client Profile

    受以下版本支持:4、3.5 SP1

    可移植类库

    受以下版本支持:可移植类库

    适用于 Windows 应用商店应用的 .NET

    受以下版本支持:Windows 8

    Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带 SP1 或更高版本的服务器核心角色;不支持 Itanium)

     

     

    .NET Framework 并不是对每个平台的所有版本都提供支持。
  • 相关阅读:
    Sizzle选择器引擎介绍
    from、includes、indexOf
    indexOf与includes的区别
    ES6 find 和 filter 的区别
    Spring MVC多个视图解析器及优先级
    Spring MVC多个视图解析器及优先级
    freemarker 中文乱码问题解决办法
    freemarker 中文乱码问题解决办法
    freemarker 中文乱码问题解决办法
    Spring集成MyBatis 通用Mapper以及 pagehelper分页插件
  • 原文地址:https://www.cnblogs.com/zqn518/p/3310246.html
Copyright © 2020-2023  润新知