zoukankan      html  css  js  c++  java
  • LINQ查询表达式---------group子句

    LINQ查询表达式---------group子句

    LINQ表达式必须以from子句开头,以select或group子句结束。使用guoup子句来返回元素分组后的结果。group 子句返回一个 IGrouping<TKey, TElement> 对象序列(实质上是列表的列表)。TKey是键的对象类型,在用于group子句的时候,它一般用于存储分组的键值;TElement是指的对象类型,用于存储分组的结果。
    class Program
    {
        public class PerInfo
        {
            public int Id
            {
                get;
                set;
            }
            public string Name
            {
                get;
                set;
            }
            public int Age
            {
                get;
                set;
            }
        }
    
        static void Main(string[] args)
        {
            List<PerInfo> perInfos = new List<PerInfo>
            {
                new PerInfo{Id = 1, Name = "小日", Age = 15},
                new PerInfo{Id = 2, Name = "小日月", Age = 17},
                new PerInfo{Id = 3, Name = "张三四", Age = 21},
                new PerInfo{Id = 4, Name = "李四五六七", Age = 23}
            };
    
            //使用布尔值作为键将结果划分成两个组
            //以‘17’为界限进行分组,大于等于17的一组,小于17的一组
            var booleanQuery1 = from p in perInfos
                                group p by p.Age >= 17;
    
            Console.WriteLine("Query1:");
            foreach (var key in booleanQuery1)
            {
                Console.WriteLine("  分组键{0},{1}", key.Key, key.Key == true ? "Age大于等于17" : "Age小于17");
                foreach (var item in key)
                {
                    Console.WriteLine("    {0}  {1}", item.Name, item.Age);
                }
            }
    
            //使用字符串作为键将结果划分为两个组
            //Name第一个字相同的为一组
            var booleanQuery2 = from p in perInfos
                                group p by p.Name[0];
    
            Console.WriteLine("
    Query2:");
            foreach (var key in booleanQuery2)
            {
                Console.WriteLine("  分组键{0}", key.Key);
                foreach (var item in key)
                {
                    Console.WriteLine("    {0}  {1}", item.Name, item.Age);
                }
            }
    
    
            //group by into
            //into 关键字来启用临时标识符
            var booleanQuery3 = from p in perInfos
                                let lenName = p.Name.Length //let子句用来保存表达式的结果
                                where lenName > 2 //只筛选出名字长度大于2的
                                group p by lenName into g//使用 into 关键字来启用临时标识符 g,该标识符具有推断类型 IGroupi
                                where g.Count() > 1 //筛选出每组数量大于1 的组
                                select g;
            Console.WriteLine("
    Query3:");
            foreach (var key in booleanQuery3)
            {
                Console.WriteLine("  分组键{0}", key.Key); //这里的分组键是名字的长度
                foreach (var item in key)
                {
                    Console.WriteLine("    {0}  {1}", item.Name, item.Age);
                }
            }
    
            Console.ReadLine();
        }
    }
    输出结果:
    Query1:
      分组键False,Age小于17
        小日  15
      分组键True,Age大于等于17
        小日月  17
        张三四  21
        李四五六七  23
    
    Query2:
      分组键小
        小日  15
        小日月  17
      分组键张
        张三四  21
      分组键李
        李四五六七  23
    
    Query3:
      分组键3
        小日月  17
        张三四  21
    

      

  • 相关阅读:
    Leetcode第一题:两数之和 (java & python)
    SpringMVC框架的注解如何使用?
    Mybatis框架的代码自动生成工具如何使用呢?
    Mybatis框架如何使用分页插件呢?
    SpringMVC框架如何实现请求转发和重定向呢?
    文件上传的方式有哪些
    Session的销毁方式到底有哪些?
    找工作就像找对象,愿程序员不再孤单
    java是最值得学习的编程语言吗?
    话说当年学习Java所踩过的坑。。。初学者必看
  • 原文地址:https://www.cnblogs.com/haibing0107/p/6497421.html
Copyright © 2011-2022 走看看