你的位置:首页 > ASP.net教程

[ASP.net教程][C#] LINQ之GroupBy

c# Linq及Lamda表达式应用经验之 GroupBy 分组 - 随风% - 博客园

c# Linq及Lamda表达式应用经验之 GroupBy 分组 示例1: GroupBy 分组在Listlt;gt;泛型中的应用 原表: 按姓名...

[C#] LINQ之GroupBy - c - 博客园

[C#] LINQ之GroupBy 声明:本文为.c6.原创,转载时请注明出处,谢谢!一...因此,自定义类如何进行分组,GroupBy是不知道的,需要自己定义自己的相等...

c# Linq及Lamda表达式应用经验之 GroupBy 分组 - CSDN博客

原文出处:.blogs./han1982/p/4138163.html 示例1: GroupBy 分组在List 原表: 按姓名Nam 分组后结果: 对DATATABLE 进行LAMDA查询时必须...

C# 使用Dictionary、linq实现根据集合里面的字符串进行分..._博客园

C# 使用Dictionary、linq实现根据集合里面的字符串进行分组 //对下面集合里面的...2. c# Linq及Lamda表达式应用经验之 GroupBy 分组(6) 3. C# 批量图...

C#里使用linq做多个值的GroupBy操作,被操作对象类型为L..._百度知道

1个回答 - 回答时间: 2017年4月12日

var groupDatas = datas.GroupBy(d =gt;new{item1=d[quot;t09LibraryNamequot;],item2=d[quot;strGroupByquot;]}).OrderBy(g =gt; g.Key); 不过OrderBy语句不...

解决C#中Linq GroupBy 和OrderBy失效的方法_C#教程_脚本之家

最近发现了一个问题,在器端的Linq GroupBy 和OrderBy居然不管用,后来终于解决了所以现在分享给大家,有需要的朋友们可以参考借鉴。...

C#在LINQ中使用GroupBy实现数据分组_百度文库

nbsp;评分:5/5nbsp;4页

C#在LINQ中使用GroupBy实现数据分组 - C#在 LINQ 中使用 GroupBy 实现数据分组 using System; using System.Collections.Gene...

EF GroupBy多个字段 - 天马3798 - CSDN博客

query.GroupBy(q =gt; new { q.Year, q.Month }) .Select(q =gt; new { ...c# Linq及Lamda表达式应用经验之 GroupBy 分组 12-23 2878 原文出处:http:/...

c# Linq及Lamda表达式应用经验之 GroupBy 分组__c# - 阿里云

摘要: 本文讲的是c# Linq及Lamda表达式应用经验之 GroupBy 分组__c#, 原文出处:.blogs./han1982/p/4138163.html 示例1: GroupBy 分组...

C# Linq datatable动态groupby - CSDN博客

在网上找了很多,发现Scott大神写了一个动态的LinQ拼装方法,但是不支持DataTable的动态方法。个人做了一些修改。先看结果 对groupby 方法进行拓展,入参...

[C#] LINQ中的GroupBy,Select,Aggregate - 简书

[C#] LINQ中的GroupBy,Select,Aggregate何幻 关注 2016.03.05 08:06* 字数80 阅读261评论0喜欢0 GroupBy用于分组,组中每个元素是一个集合。 Select用...

C# Linq处理list数据 - 苍 - 博客园

C# Linq处理list数据 获取数据列表。 //获取数据列表,Model是类 IListlt;Modelgt; ...list = list.GroupBy(a =gt; a.user_type).Select(it =gt; it.First()).T...

c# Linq Lamda表达式使用 GroupBy 分组 - zunguitianch..._CSDN博客

LINQ标准查询操作符(二)——Join、GroupJoin、GroupBy、Concat、联系操作符 联接是指将一个数据源对象与另一个数据源对象进行关联或者联合的操作。这...

C#DataTable 使用GroupBy方法的lamda 表达式和Linq语句写..._博客园

C#DataTable 使用GroupBy方法的lamda 表达式和Linq语句写法 DataTable ds = new DataTable();//1、lamda 表达式写法(推荐) var result = ds.AsEnumera...

Linq中GroupBy方法的使用总结.-寒冷的-北极-CSDN下载

Linq中GroupBy方法的使用总结.

..../C#程序开发中如何使用Linq对集合Listlt;Tgt;进行分组(GroupBy...

那么,[Linq]./C#程序开发中如何使用Linq对集合Listlt;Tgt;进行分组(GroupBy)和统计(Count)? 方案一 var result = data.GroupBy(info =gt; info.metric)...

linq如何groupby时间的日期-CSDN论坛

9条回复nbsp;-nbsp;发帖时间:nbsp;2015年6月16日⋅ c# Linq及Lamda表达式应用经验之 GroupBy 分组 ⋅ Linq按日期统计查询 ⋅ Linq日期差值计算,Linq日期比较方法 ⋅ Linq 和 Lambda 查询中按照多...

LINQ技巧:如何通过多次调用GroupBy实现分组嵌套 - C#编..._红黑联盟

LINQ技巧:如何通过多次调用GroupBy实现分组嵌套2012-07-12 08:49:43 个评论 ...教你如何理解C# 项目 文章 推荐 · Java WebService入门实例 · strut...

.(C#)使用Linq GroupBy将泛型集合Listlt;Tgt;按某个属性分组后进行...

. Framework 3.5中新增了Linq,让我们在操作泛型数据类型时方便快捷了很多,比如Concat,GroupBy,GroupJoin,Select等等。今天这篇文章要给大家分享的...中秋节去华南植物园有什么活动?广州华南植物园优惠活动介绍?深圳锦绣中华中秋节有什么活动?锦绣中华中秋节门票多少钱?教师节去广州塔门票优惠吗?广州电视塔凭教师证门票半价吗?2017广州塔教师节活动?广州电视塔教师门票半价优惠吗?广州塔中秋节有什么活动?中秋节去广州电视塔优惠活动?中国赴泰游再次升温 驻泰使馆讲故事提醒安全北京出发去梵蒂冈旅游 北京出发去梵蒂冈旅游 北京出发去梵蒂冈旅游 北京出发去梵蒂冈旅游 北京出发去梵蒂冈旅游 北京出发去梵蒂冈旅游 北京出发去非洲旅游 北京出发去非洲旅游 北京出发去非洲旅游 北京出发去非洲旅游 北京出发去非洲旅游 北京出发去非洲旅游 北京出发去菲律宾旅游 北京出发去菲律宾旅游 北京出发去菲律宾旅游 北京出发去菲律宾旅游 北京出发去菲律宾旅游 北京出发去菲律宾旅游 北京出发去斐济群岛旅游 北京出发去斐济群岛旅游 北京出发去斐济群岛旅游 北京出发去斐济群岛旅游 北京出发去斐济群岛旅游 北京出发去斐济群岛旅游

声明:本文为www.cnc6.cn原创,转载时请注明出处,谢谢!

一、先准备要使用的类:

1、Person类:

 class Person {  public string Name { set; get; }  public int Age { set; get; }  public string Gender { set; get; }  public override string ToString() => Name; }

2、准备要使用的List,用于分组(GroupBy):

  List<Person> personList = new List<Person>  {   new Person   {    Name = "P1", Age = 18, Gender = "Male"   },   new Person   {    Name = "P2", Age = 19, Gender = "Male",   },   new Person   {    Name = "P2", Age = 17,Gender = "Female",   }  };

二、第一种用法:

public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);

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

我们要分组的集合为source,集合内每个元素的类型为TSource,这里第一个参数keySelector的类型为Func<TSource, TKey>,用于将TSource元素按照由此委托返回的类型TKey进行分组,结果为一个已分好组的集合(集合中的集合)。

编写客户端试验代码如下:

  var groups = personList.GroupBy(p => p.Gender);  foreach (var group in groups)  {   Console.WriteLine(group.Key);   foreach(var person in group)   {    Console.WriteLine($"\t{person.Name},{person.Age}");   }  }

以上代码指定的KeySelector是Person类的Gender属性,因此,以上会按照Gender(性别)进行分组,我们使用两个嵌套的foreach循环将分组的内容打印到控制台。

因为groups返回的类型为IEnumerable<IGouping<TKey,TSource>>,因此以上返回的类型为IEnumerable<IGouping<string,Person>>。

IGouping<string,Person>是已经分组后的集合,内部集合元素为Person,且IGouping有一个Key属性,类型为string(指的是Gender属性类型),用于分组的标识。

输出结果如下:

其等价的LINQ语句为:

var groups = from p in personList    group p by p.Gender into pGroup    select pGroup;

以上的意思可以这样理解:从personList取出p,并对p进行分组,使用分组的依据(Key)为p.Gender,并将分组的结果存储到pGroup,并将分组的结果选择出来合并成一个集合。

 三、第二种用法:

public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer);

官方释义:根据指定的键选择器函数对序列中的元素进行分组,并使用指定的比较器对键进行比较。

这种比第一种方法多了一个参数,那就是一个相等比较器,目的是为了当TKey为自定义的类时,GroupBy能根据TKey指定的类根据相等比较器进行分组,

因此,自定义类如何进行分组,GroupBy是不知道的,需要自己定义自己的相等比较器。

首先,将personList更改如下(下划线部分):

  List<Person> personList = new List<Person>  {   new Person   {    Name = "P1", Age = 18, Gender = "Male"   },   new Person   {    Name = "P1", Age = 19, Gender = "Male",   },   new Person   {    Name = "P3", Age = 17,Gender = "Female",   }  };

其次,增加一个相等比较器类,用于对Person进行分组:

 class PersonEqualityComparer : IEqualityComparer<Person> {  public bool Equals(Person x, Person y) => x.Name == y.Name;  public int GetHashCode(Person obj) => obj.Name.GetHashCode(); }

其中定义了如何对一个Person相等性定义,只要实现IEqualityComparer<Person>即可,这里以Name作为Person类是否相同的依据。

最后,现在我们对Person类进行分组,编写客户端实验代码如下:

  var groups = personList.GroupBy(p => p, new PersonEqualityComparer());  foreach (var group in groups)  {   Console.WriteLine(group.Key.ToString());   foreach(var person in group)   {    Console.WriteLine($"\t{person.Age},{person.Gender}");   }  }

以上的分组依据是Person类,并运用了自己定义的Person类相同比较器,只要Name相同,就分为一组,

输出结果如下:

第三~八种用法,待续~