热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linq操作符:分组操作符

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

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



1 public static IEnumerable> GroupBy(this IEnumerable source, Func keySelector);
2 public static IEnumerable> GroupBy(this IEnumerable source, Func keySelector,
IEqualityComparer comparer);


 从方法定义中可以看出:GroupBy的返回值类型是:IEnumerable>。其元素类型是IGrouping。TKey属性代表了分组时使用的关键值,TSource属性代表了分组之后的元素集合。遍历IGrouping元素可以读取到每一个TSource类型。看下面的例子:


1、定义Product类,其定义如下:



 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace GroupOperation
8 {
9 public class Product
10 {
11 public int Id { get; set; }
12 public int CategoryId { get; set; }
13 public string Name { get; set; }
14 public double Price { get; set; }
15 public DateTime CreateTime { get; set; }
16 }
17 }


 2、在Main()方法中调用



 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace GroupOperation
8 {
9 class Program
10 {
11 static void Main(string[] args)
12 {
13 List listProduct = new List()
14 {
15 new Product(){Id=1,CategoryId=1, Name="C#高级编程第10版", Price=100.67,CreateTime=DateTime.Now},
16 new Product(){Id=2,CategoryId=1, Name="Redis开发和运维", Price=69.9,CreateTime=DateTime.Now.AddDays(-19)},
17 new Product(){Id=3,CategoryId=2, Name="活着", Price=57,CreateTime=DateTime.Now.AddMonths(-3)},
18 new Product(){Id=4,CategoryId=3, Name="高等数学", Price=97,CreateTime=DateTime.Now.AddMonths(-1)},
19 new Product(){Id=5,CategoryId=6, Name="国家宝藏", Price=52.8,CreateTime=DateTime.Now.AddMonths(-1)}
20 };
21
22 // 查询表达式
23 var listExpress = from p in listProduct group p by p.CategoryId;
24 Console.WriteLine("输出查询表达式结果");
25 foreach (var item in listExpress)
26 {
27 Console.WriteLine($"CategoryId:{item.Key}");
28 foreach(var p in item)
29 {
30 Console.WriteLine($"ProduceName:{p.Name},ProductPrice:{p.Price},PublishTime:{p.CreateTime}");
31 }
32 }
33 Console.WriteLine("***************************************");
34 // 查询方法
35 var listFun = listProduct.GroupBy(p => p.CategoryId);
36 Console.WriteLine("输出方法语法结果");
37 foreach (var item in listFun)
38 {
39 Console.WriteLine($"CategoryId:{item.Key}");
40 foreach (var p in item)
41 {
42 Console.WriteLine($"ProduceName:{p.Name},ProductPrice:{p.Price},PublishTime:{p.CreateTime}");
43 }
44 }
45 Console.ReadKey();
46 }
47 }
48 }


 结果:


技术分享图片


 下面在来看看多个分组条件的例子。



 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace GroupOperation
8 {
9 class Program
10 {
11 static void Main(string[] args)
12 {
13 List listProduct = new List()
14 {
15 new Product(){Id=1,CategoryId=1, Name="C#高级编程第10版", Price=100.67,CreateTime=DateTime.Now},
16 new Product(){Id=2,CategoryId=1, Name="Redis开发和运维", Price=69.9,CreateTime=DateTime.Now.AddDays(-19)},
17 new Product(){Id=3,CategoryId=2, Name="活着", Price=57,CreateTime=DateTime.Now.AddMonths(-3)},
18 new Product(){Id=4,CategoryId=3, Name="高等数学", Price=97,CreateTime=DateTime.Now.AddMonths(-1)},
19 new Product(){Id=5,CategoryId=6, Name="国家宝藏", Price=52.8,CreateTime=DateTime.Now.AddMonths(-1)}
20 };
21
22 // 查询表达式
23 var list = from p in listProduct group p by new { p.CategoryId, p.Price };
24 Console.WriteLine("查询表达式方式1输出:");
25 foreach (var item in list)
26 {
27 Console.WriteLine("key:" + item.Key);
28 foreach (var subItem in item)
29 {
30 Console.WriteLine($"ProduceName:{subItem.Name},ProductPrice:{subItem.Price},PublishTime:{subItem.CreateTime}");
31 }
32 }
33 var listExpress = from p in listProduct
34 group p by new { p.CategoryId, p.Price } into r // 使用into把数据填充到局部变量r中,然后select筛选数据
35 select new { key = r.Key, ListGroup = r.ToList() };
36 Console.WriteLine("查询表达式方式2输出:");
37 foreach(var item in listExpress)
38 {
39 Console.WriteLine("key:"+item.key);
40 foreach (var subItem in item.ListGroup)
41 {
42 Console.WriteLine($"ProduceName:{subItem.Name},ProductPrice:{subItem.Price},PublishTime:{subItem.CreateTime}");
43 }
44 }
45
46 // 方法语法
47 var listFun = listProduct.GroupBy(p => new { p.CategoryId, p.Price }).Select(g => new { key = g.Key, ListGroup = g.ToList() });
48 Console.WriteLine("方法语法输出:");
49 foreach (var item in listFun)
50 {
51 Console.WriteLine("key:" + item.key);
52 foreach (var subItem in item.ListGroup)
53 {
54 Console.WriteLine($"ProduceName:{subItem.Name},ProductPrice:{subItem.Price},PublishTime:{subItem.CreateTime}");
55 }
56 }
57
58 Console.ReadKey();
59 }
60 }
61 }


 结果:


技术分享图片


 

linq操作符:分组操作符



推荐阅读
  • 列表是 Python 编程语言中最常用的数据结构之一,它类似于其他编程语言中的数组。本文将详细介绍 Python 3 中列表的基本操作和特性。 ... [详细]
  • Java Set集合源码深度解析
    本文将深入探讨Java集合框架中的Set接口及其主要实现类HashSet、LinkedHashSet和TreeSet的源码实现,帮助读者理解这些集合类的工作原理及应用场景。 ... [详细]
  • FreeBSD作为Berkeley Software Distribution (BSD)的一个关键分支,其发展历程深刻影响了现代操作系统的设计。本文将探讨FreeBSD从早期版本到最新版本的技术进步及其对计算行业的贡献。 ... [详细]
  • 尽管大多数解决方案倾向于使用递归来解决数独问题,但递归方法并非总是最优选择。本文探讨了一种基于迭代的方法来求解数独,这种方法不仅避免了递归的局限性,还通过使用集合来高效管理空位及其可能的数字选项。此方法未采用剪枝或最小候选数优先策略,而是通过迭代遍历所有可能性来寻找解。 ... [详细]
  • 掌握数据库引擎存储过程与系统视图查询:DBA与BI开发者的必备技能
    本文介绍了如何利用数据库引擎存储过程及系统视图查询数据库结构和对象信息,为数据库管理员(DBA)和商业智能(BI)开发人员提供实用的基础知识。文章涵盖了一系列常用的SQL Server存储过程和系统视图,帮助读者快速获取数据库的相关信息。 ... [详细]
  • 深入理解Kafka架构
    本文将详细介绍Kafka的内部工作机制,包括其工作流程、文件存储机制、生产者与消费者的具体实现,以及如何通过高效读写技术和Zookeeper支持来确保系统的高性能和稳定性。 ... [详细]
  • 本文详细介绍了ejabberd中的验证码服务、接收器以及服务器间通信的监督者和工作进程,包括它们的启动方式和主要功能。 ... [详细]
  • 使用java8 API遍历过滤文件目录及子目录和隐藏文件示例详解_java
    这篇文章主要介绍了使用java8API遍历过滤文件目录及子目录及隐藏文件示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着 ... [详细]
  • 本文深入探讨了在Java编程语言中,如何使用`org.apache.polygene.api.association.AssociationDescriptor.qualifiedName()`方法,并提供了多个实际应用的代码示例。这些示例源自GitHub、StackOverflow和Maven等知名平台,旨在帮助开发者更好地理解和应用这一方法。 ... [详细]
  • 博主从零开始学习HTML(入门基础)
    从零开始学习HTML(入门基础)互联网三大基石HTTP协议URL:统一资源定位符HTML:超文本标记语言HTML的Head标签中的常用元素<!--告知 ... [详细]
  • 本文详细介绍了MyBatis中的延迟加载功能,包括其基本概念、实现方式以及如何在实际开发中应用。通过具体的代码示例,帮助读者更好地理解和掌握这一优化数据库查询性能的重要技术。 ... [详细]
  • 在日常开发中,经常需要通过Web服务进行数据交互。然而,在参数传递时会遇到一些限制,例如自定义实体类和Hashtable等复杂数据类型无法直接传递。本文将详细介绍如何在ASP.NET环境中有效地传递Hashtable数据。 ... [详细]
  • 本文详细探讨了如何在 SparkSQL 中创建 DataFrame,涵盖了从基本概念到具体实践的各种方法。作为持续学习的一部分,本文将持续更新以提供最新信息。 ... [详细]
  • css 网站页面内容占位加载动画效果的实现
    阅读目录阐述index.htmlindex.jsindex.css阐述内容占位动画效果,这个也是我们经常在一些网站上看到的效果,这种效果的设计 ... [详细]
  • 本文介绍了如何在Web页面中实现带有进度条的异步文件上传功能,包括HTML和CSS的基本结构及样式设置。 ... [详细]
author-avatar
i89379844
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有