zoukankan      html  css  js  c++  java
  • LINQ中分组操作符(十)

    分组是根据一个特定的值将序列中的元素进行分组。LINQ只包含一个分组操作符:GroupBy。GroupBy操作符类似于T-SQL语言中的Group By语句

    一、单一条件分组

    Sample Code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace GroupOperation
    {
        public class Product
        {
            public int Id { get; set; }
            public int CategoryId { get; set; }
            public string Name { get; set; }
            public double Price { get; set; }
            public DateTime CreateTime { get; set; }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                List<Product> listProduct = new List<Product>()
                {
                   new Product(){Id=1,CategoryId=1, Name="C#高级编程第10版", Price=100.67, CreateTime=DateTime.Now},
                   new Product(){Id=2,CategoryId=1, Name="Redis开发和运维", Price=69.9, CreateTime=DateTime.Now.AddDays(-19)},
                   new Product(){Id=3,CategoryId=2, Name="活着", Price=57, CreateTime=DateTime.Now.AddMonths(-3)},
                   new Product(){Id=4,CategoryId=3, Name="高等数学", Price=97, CreateTime=DateTime.Now.AddMonths(-1)},
                   new Product(){Id=5,CategoryId=6, Name="国家宝藏", Price=52.8, CreateTime=DateTime.Now.AddMonths(-1)}
                };
    
                // 查询表达式          
                var listExpress = from p in listProduct group p by p.CategoryId;
                Console.WriteLine("输出查询表达式结果");
                foreach (var item in listExpress)
                {
                    Console.WriteLine($"CategoryId:{item.Key}");
                    foreach (var p in item)
                    {
                        Console.WriteLine($"ProduceName:{p.Name},ProductPrice:{p.Price},PublishTime:{p.CreateTime}");
                    }
                }
                Console.WriteLine("***************************************");
    
                // 查询方法
                var listFun = listProduct.GroupBy(p => p.CategoryId);
                Console.WriteLine("输出方法语法结果");
                foreach (var item in listFun)
                {
                    Console.WriteLine($"CategoryId:{item.Key}");
                    foreach (var p in item)
                    {
                        Console.WriteLine($"ProduceName:{p.Name},ProductPrice:{p.Price},PublishTime:{p.CreateTime}");
                    }
                }
    
                Console.ReadKey();
            }
        }
    }
    View Code

    二、多条件分组

    Sample Code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace GroupOperation
    {
        public class Product
        {
            public int Id { get; set; }
            public int CategoryId { get; set; }
            public string Name { get; set; }
            public double Price { get; set; }
            public DateTime CreateTime { get; set; }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                List<Product> listProduct = new List<Product>()
                {
                   new Product(){Id=1,CategoryId=1, Name="C#高级编程第10版", Price=100.67, CreateTime=DateTime.Now},
                   new Product(){Id=2,CategoryId=1, Name="Redis开发和运维", Price=100.67, CreateTime=DateTime.Now.AddDays(-19)},
                   new Product(){Id=3,CategoryId=2, Name="活着", Price=57, CreateTime=DateTime.Now.AddMonths(-3)},
                   new Product(){Id=4,CategoryId=3, Name="高等数学", Price=97, CreateTime=DateTime.Now.AddMonths(-1)},
                   new Product(){Id=5,CategoryId=6, Name="国家宝藏", Price=52.8, CreateTime=DateTime.Now.AddMonths(-1)}
                };
    
                // 查询表达式
                var list = from p in listProduct group p by new { p.CategoryId, p.Price };
                Console.WriteLine("查询表达式方式1输出:");
                foreach (var item in list)
                {
                    Console.WriteLine("key:" + item.Key);
                    foreach (var subItem in item)
                    {
                        Console.WriteLine($"ProduceName:{subItem.Name},ProductPrice:{subItem.Price},PublishTime:{subItem.CreateTime}");
                    }
                }
                Console.WriteLine("************************************************************");
    
                var listExpress = from p in listProduct
                                  group p by new { p.CategoryId, p.Price } into r  // 使用into把数据填充到局部变量r中,然后select筛选数据
                                  select new { key = r.Key, ListGroup = r.ToList() };
                Console.WriteLine("查询表达式方式2输出:");
                foreach (var item in listExpress)
                {
                    Console.WriteLine("key:" + item.key);
                    foreach (var subItem in item.ListGroup)
                    {
                        Console.WriteLine($"ProduceName:{subItem.Name},ProductPrice:{subItem.Price},PublishTime:{subItem.CreateTime}");
                    }
                }
                Console.WriteLine("************************************************************");
    
                // 方法语法
                var listFun = listProduct.GroupBy(p => new { p.CategoryId, p.Price }).Select(g => new { key = g.Key, ListGroup = g.ToList() });
                Console.WriteLine("方法语法输出:");
                foreach (var item in listFun)
                {
                    Console.WriteLine("key:" + item.key);
                    foreach (var subItem in item.ListGroup)
                    {
                        Console.WriteLine($"ProduceName:{subItem.Name},ProductPrice:{subItem.Price},PublishTime:{subItem.CreateTime}");
                    }
                }
    
                Console.ReadKey();
            }
        }
    }
    View Code

  • 相关阅读:
    [LintCode] Maximum Subarray Difference
    [HDU 3415] Max Sum of Max-K-sub-sequence
    [LintCode] Count of Smaller Number before itself
    [LeetCode] Invert Binary Tree
    [LintCode] Max Tree
    [LeetCode] Implement Stack using Queues
    [LintCode] Maximum Subarray III
    [LeetCode] Basic Calculator & Basic Calculator II
    [LeetCode] Rectangle Area
    Tensorflow[目录结构]
  • 原文地址:https://www.cnblogs.com/LuckyZLi/p/12716660.html
Copyright © 2011-2022 走看看