• 读书笔记 C# Linq查询之group关键字浅析


    在C#中,自从有了Linq查询表达式后,程序员对可被迭代的序列或列表执行一系列的筛选、排序、过滤、分组、查询等操作。本文章所要讲述的是group关键字。

    Linq查询表达式,是以from关键字开头,以select或group关键字结尾,它们之中可以插入where、orderby、join、let甚至附加的from子句。

    group子句返回的是一个IGrouping<TKey,TElement>对象序列,请注意,是对象序列,而不是单个对象。由于group查询产生的IGrouping<TKey,TElement>实质上是列表的列表。因此必须使用嵌套的foreach循环来访问每一组的各个子项。外部循环可以访问每个组的Key,内部循环可以访问每个组的子项。

    每个组的Key可以是任何类型,如字符串、用户自定义的对象或其他。

    可以用如下代码来对序列进行分组:

    //不排序的直接分组
    var
    cityGroup = from city in cities group city by city.Name;
    //通过每组的Key排序的分组
    var cityGroup = from city in cities
                    //先通过每个城市的名称来分组,每组的子项就是group关键字后面的city对象实例
                    group city by city.Name
                    //接着将该组赋给一个变量g
                    into g
                    //然后就可以通过g的Key去排序,g.Key就是by关键字后面的那个参数,即city.Name
                    orderby g.Key
                    //最后选中该组
                    select g
    //自定义group的每个子项
    var cityGroup = from city in cities
    //注意,by关键字后面的参数 一定要和 group关键字后面的参数 有一定的关联,否则无法进行分组 group
    new{city.Name,city.PeopleCount,SomeParam="自定义"} by city.Name

     可以用嵌套的foreach循环来获取每个子项。每个子项其实就是group关键字后面的对象,如city。

    foreach(var theCities in cityGroup){
        //首先获取每个组的Key,在分组时,by后面的那个参数city.Name
        Console.WriteLine("每个组的Key:{0}",theCities.Key);
    
        //接着再次循环,获取每个组的子项,即group后面的那个参数city对象
        foreach(var city in theCities){
           Console.WriteLine("城市名称:{0}",city.Name);
           Console.WriteLine("总人数:{0}",city.PeopleCount);
       }      
    }
  • 相关阅读:
    [学习笔记]信号基本概念(中断和信号)/名称及常用信号/信号处理/signal函数实践
    基于jquery的移动端JS无缝切换
    判断form表单每个input字段是否有内容
    整合常用功能的JS小组件库-v1.0
    获取网页可见区域的宽高(兼容各浏览器)
    判断网页上滚还是下滚
    文字溢出处理
    网页导航条滚动固定
    清除浮动
    CSS文字两端对齐
  • 原文地址:https://www.cnblogs.com/williamwsj/p/6098592.html
Copyright © 2020-2023  润新知