asp.net LinQ中GroupBy的用法

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

本人第一次写技术博客,如有错误之处,请指出,3Q!

共同学习,共同努力!!!

之前同事问了我一个问题,假如数据库里有一张表University(大学),表中有3列,分别是City(所在城市),Name(大学名称),Number(编号),如何将表中的数据先按照大学所在城市排序,再按照大学编号排序。其实这个问题很简单,如果写SQL语句肯定是要使用GroupBy分组函数进行分组。

其实最后我并没有推荐同事使用sql的方式实现,而是使用了LinQ中的GroupBy,代码简单,但是第一次编码的时候,还是出现了很多问题。


官方文档:http://msdn.microsoft.com/zh-cn/library/system.linq.enumerable.groupby(v=vs.110).aspx


University大学实体类:

    /// <summary>
    /// 大学实体类
    /// </summary>
    public class University
    {
        /// <summary>
        /// 所在城市
        /// </summary>
        public string City { get; set; }
        /// <summary>
        /// 大学名称
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 编号
        /// </summary>
        public int Number { get; set; }
    }


aspx.cs数据处理代码:

<span style="white-space:pre">		</span>List<University> UniversityList = new List<University>();
                UniversityList.Add(new University { City = "北京", Name = "北京大学", Number = 1 });
                UniversityList.Add(new University { City = "上海", Name = "同济大学", Number = 5 });
                UniversityList.Add(new University { City = "天津", Name = "南开大学", Number = 8 });
                UniversityList.Add(new University { City = "北京", Name = "清华大学", Number = 2 });
                UniversityList.Add(new University { City = "安徽", Name = "中国科技大学", Number = 10 });
                UniversityList.Add(new University { City = "北京", Name = "外国语大学", Number = 4 });
                UniversityList.Add(new University { City = "上海", Name = "交通大学", Number = 7 });
                UniversityList.Add(new University { City = "浙江", Name = "浙江大学", Number = 9 });
                UniversityList.Add(new University { City = "广东", Name = "暨南大学", Number = 12 });
                UniversityList.Add(new University { City = "上海", Name = "华东科技大学", Number = 6 });
                UniversityList.Add(new University { City = "北京", Name = "人民大学", Number = 3 });
                UniversityList.Add(new University { City = "广东", Name = "厦门大学", Number = 13 });
                UniversityList.Add(new University { City = "广东", Name = "中山大学", Number = 11 });

                //分组并排序
                var GroupList = UniversityList.GroupBy(x => x.City).OrderBy(x => x.Key);

                //下面这个集合是最终处理结果的集合
                List<University> newList = new List<University>();

                foreach (var university in GroupList)
                {
                    //将上面分组的集合转换为泛型集合,并再次按照Number排序
                    List<University> tempList = university.ToList<University>().OrderBy(x => x.Number).ToList();

                    /*
                     *以上代码也可以这样写 
                    *List<University> tempList = university.ToList<University>();
                    *tempList = tempList.OrderBy(x => x.Number).ToList();
                    */

                    foreach (University u in tempList)
                    {
                        newList.Add(u);
                    }
                }

                gvList.DataSource = newList;
                gvList.DataBind();


结果:


代码很容易理解,没有复杂的逻辑。

需要注意的是在分组排序时,大家可能注意到,我使用的var类型去接收的。


本人第一次编写时,犯了一个特大的错误,后来才知道GroupBy集合后,类型就发生了转变,变为一个带有key值得集合:IEnumerable<IGrouping<TKey, TSource>>。


还有一点需要注意的是,当GroupBy后,再次OrderBy时,参数Lambda表达式只能调出一个属性,就是Key,这个属性实际上就是前面GroupBy中的属性。

C#之LINQ中常用的ToLookup,GroupBy, Join之用法总结 一、ToLookup Lookup<TKey,TElement> 类 class Student { public string Name; public double Weight; public int Age; } class Program { static void Main(string[] args) { LookupExample( 阅读详情

相关推荐

C# LINQ实战指南:从基础用法到性能优化,彻底告别冗余数据操作代码

基础用法能满足大部分简单场景,而进阶用法则能解决复杂的数据操作需求,比如按部门分组统计、多集合联合查询、封装通用查询逻辑等,进一步提升开发效率和代码复用性。实战中,很多查询逻辑会重复使用(比如“筛选在职员工”“按工资区间筛选”),此时可自定义LINQ扩展方法,封装通用逻辑,实现代码复用,提升开发效率。案例:封装3个通用扩展方法,适配员工集合的高频查询场景。// 注意:扩展方法必须定义在静态类中,且第一个参数用this修饰(表示扩展的类型)/// 扩展方法:筛选在职员工。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 475

[C#] LINQGroupBy

一、先准备要使用的类: 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):

极客神殿 1万+

ASP.NET中利用LINQ高效查询数据集实战指南

命名空间所属程序集必须引用?主要贡献/ 内置是提供通用查询操作符是定义 DataTable、DataRow 等基础类型单独 NuGet 包视目标平台而定实现 AsEnumerable 和 Field扩展三者缺一不可,共同构成了 LINQ to DataSet 的完整依赖链条。有时原始字段名不符合命名规范,或需要进行格式化转换。此时可在Select中重命名并处理类型:用户编号 = r.Field<int>("User_ID"),

weixin_42511832的博客 699

C#Linq中的GroupBy

然后你想根据ID建立一个映射表你要怎么做?

q__y__L的博客 3203

Linq 中按照多个值进行分组(GroupBy) 后进行求和

List<User> products = new List<User>() { new User(){ Id="1", Name="n1",count1=1}, new User(){ Id="1", Name="n1",count1=2}, new User(){ Id="2", Name="n2",co...

qq165285727的专栏 9980

LINQ分组查询—GroupBy()

今天写项目时遇到一个分组查询的需求:将订单列表中商品明细按商品编号汇总,我这里简单的mark一下。 之所以要记录,是因为之前很少用linq去写分组查询,其次是在此过程中遇到了一个小问题。 我们都知道linq语句最后也是要转化成sql语句的,很多人忽略开发效率一味地认为linq的执行效率没有sql的高,或者因为习惯问题不愿意使用linq。(今天在此就不探讨这个问题了,哲学思想告诉我“存在即合理”...

猿人奶爸的博客 1万+

Linq】Get top 5 values with lambda Group By Id, Order By and Then select top 5 of each grouping)

【代码】【Linq】Get top 5 values with lambda Group By Id, Order By and Then select top 5 of each grouping)

德仔 391

(25)ASP.NET Core2.2 EF查询(复杂查询运算符、原生SQL查询、异步查询)

在生产场景中,我们经常用到LINQ运算符进行查询获取数据,现在我们就来了解下生产场景经常出现几种复杂查询运算符。

wzk153的博客 1019

Linq使用Group By分析 Entity Framework 使用注意:Where查询条件中用到的关联实体不需要Include

Linq使用Group By分析 http://www.aspww.cn/View/11060401.aspx  Entity Framework 使用注意:Where查询条件中用到的关联实体不需要Include http://www.cnblogs.com/dudu/archive/2012/04/13/entity_framework_include_where.html

TianGaojie123abc的专栏 3102

ASP.NET过滤重复字符与字符串数组去掉重复字符串几种方法

<br />方法1:<br />string[] stest = new string[]{"aaa","bbb","ccc","aaa","ccc"};   <br />ArrayList list=new ArrayList();   <br />for(int i=0;i<stest.Length;i++)   <br />{   <br /> bool IsExist=true;   <br /> for(int j=0;j<list.Count;j++)   <br /> {   <br /> 

albert的专栏 1146

ASP.NET LINQ _2

  ASPNETDBDataContext aspnetdb = new ASPNETDBDataContext(); // 反回需要显示的列 //var linq_sql = from clo in aspnetdb.Orders // select clo.ShipName; //反回在匿名类中

楚人子游的专栏 726

Sunshine与linq扩展方法

一:asp.net mvc 取request

晓剑 882

c# GroupBy分组 去重

/// <summary> /// 根据 RoleID And SectionStr 获取 UserInfoList /// </summary> /// <returns></returns> public ActionResult GetUserDataByRoleAndSect...

diaoyangai4138的博客 988

EF中GroupBy扩展方法的简单使用

public ActionResult ShopInfo() { ViewBag.ShopList = ShopService.GetEntities(x => x.IsDelete == false).OrderByDescending(x => x.Sort).ToList(); var Shop...

863

mvc4使用viewbag在view获取Controller里的匿名泛型集合

public ActionResult Details(int id = 0) { Theme theme = db.Theme.Find(id); theme.iContent = db.Content if (theme == null) { re

q80703116的专栏 2034

asp.net mvc 实现博客的时间分类管理

先看效果 这个其实用c#实现起来比较简单: Sides = bllSession.IArticleBLL.GetList("") .Select(a => a.Time) .GroupBy(a => a.GetDateTimeFormats('y')[0]) ...

dgnwy6921的博客 91

LinQ综合应用实例

直接上代码,内容很浅显易懂,在这里就不做更多的解释,解释见代码注释。 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System...

weixin_30260399的博客 150

LINQ查询中LINQ之Group By的用法

LINQ定义了大约40个查询操作符,如select、from、in、where、group 以及order by,借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据。Linq有很多值得学习的地方,这里我们主要介绍Linq使用Group By。 一、Linq对谁适用 linq的语法通过System.Linq下面的Enumerable类提供支持,通过观察他的签名...

dayon1988的博客 637
下一篇: 使用ScriptManager+UpdatePanel+Timer控件实现在GridView中倒计时功能
完美的神速
博客等级 码龄14年 10粉丝 2原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值