广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c#中查询表达式GroupBy的使用方法
  • 187
分享到

c#中查询表达式GroupBy的使用方法

2024-04-02 19:04:59 187人浏览 八月长安
摘要

说明: C#中实现IEnumerable<T>接口的类提供了很多扩展方法,其中Select,Where等为最常见的,且几乎和sql语法类似比较好理解,基本满足了

说明:

C#中实现IEnumerable<T>接口的类提供了很多扩展方法,其中Select,Where等为最常见的,且几乎和sql语法类似比较好理解,基本满足了日常处理集合的大部分需求,然而还有一部分稍有不一样理解起来比较拗,实际分析一下实现的原理倒也很好理解,本篇文章介绍一下GroupBy的使用方法。

实验基础数据用例:

Student类:


public class Student
    {
        public int StuId { get; set; }

        public string ClassName { get; set; }

        public string StudentName { get; set; }
    }

设定数据如下:


List<Student> studentList = new List<Student>
            {
                new Student {ClassName = "软工一班", StudentName = "康巴一", StuId = 1},
                new Student {ClassName = "软工一班", StudentName = "康巴二", StuId = 2},
                new Student {ClassName = "软工一班", StudentName = "康巴三", StuId = 3},
                new Student {ClassName = "软工二班", StudentName = "康定一", StuId = 4},
                new Student {ClassName = "软工二班", StudentName = "康定二", StuId = 5},
                new Student {ClassName = "软工二班", StudentName = "康定三", StuId = 6},
            };

我们假设两个班里的学生总共有六名,现在根据班级分组


IEnumerable<IGrouping<string, Student>> studentGroup = studentList.GroupBy(s => s.ClassName);

如代码,调用GroupBy扩展方法后,返回类型为IEnumerable<IGrouping<string, Student>>, IEnumerable代表了返回结果可被foreach遍历,其中泛型实现为IGrouping<string,Student>,按照普遍理解的分组的概念,可以推断IGrouping中应该是string代表的是一个key,即ClassName,那么key对应的应该就是一个Student的集合,但是代码应该怎样实现呢?

可以首先foreach一下studentGroup


foreach (IGrouping<string, Student> item in studentGroup)
            {
                
            }

这时候可以item.一下看看提示信息

这时候发现,只能提示出来的属性只有一个key,那么怎样通过item获取到分组后的Student集合呢?这时候发现第二个GetEnumerator()方法,这个说明了item是可以被foreach的,类型为IEnumerator<Student>,说明了可被遍历的类型为Student

然后可以foreach下item试一试

如果所示,果然是Student,根据推断,现在在foreach中遍历所有数据,然后打出来看一下


foreach (IGrouping<string, Student> item in studentGroup)
            {
                Console.WriteLine(item.Key);
                foreach (var student in item)
                {
                    Console.WriteLine(student.StudentName);
                }
            }

执行结果如下:

所以可以断定item是一个Student的集合,那么为什么item还有个key属性呢,好像是和平常的集合不太一样,事实确实是不一样的,我们看下IGrouping的定义如下:


public interface IGrouping<out TKEy, out TElement> : IEnumerable<TElement>, IEnumerable
  {
    /// <summary>
    /// 获取 <see cref="T:System.Linq.IGrouping`2"/> 的键。
    /// </summary>
    /// 
    /// <returns>
    /// <see cref="T:System.Linq.IGrouping`2"/> 的键。
    /// </returns>
    [__DynamicallyInvokable]
    TKey Key { [__DynamicallyInvokable] get; }
  }

IGrouping的key是作为自己的属性来存储了,TElement则实现了IEnumerable<TElement>,所以调用foreach遍历IGrouping的时候返回的即是Student的集合了

这个探索是挺有趣的,通过神器vs的智能提示和源码的实现最终知道了GroupBy的用法,并且了解了为什么这样用。

同时也看出了通过接口可以巧妙的实现多态,其中自然是妙趣无穷!

到此这篇关于c#中查询表达式GroupBy的使用的文章就介绍到这了,更多相关c#查询表达式GroupBy使用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: c#中查询表达式GroupBy的使用方法

本文链接: https://www.lsjlt.com/news/156297.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c#中查询表达式GroupBy的使用方法
    说明: c#中实现IEnumerable<T>接口的类提供了很多扩展方法,其中Select,Where等为最常见的,且几乎和Sql语法类似比较好理解,基本满足了...
    99+
    2022-11-12
  • c#中查询表达式GroupBy怎么用
    这篇文章主要介绍c#中查询表达式GroupBy怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实验基础数据用例:Student类:public class Student  ...
    99+
    2023-06-25
  • C# LINQ查询表达式及对应LAMBDA表达式的用法
    目录首先先让我们看一下什么是LINQ查询表达式和Lambda表达式:什么是“延迟执行”?还是上面例子中的查询:并行linqC#编程语言非常优美,我个人还是非常赞同的。特别是在学习一段...
    99+
    2022-11-12
  • MySql中使用正则表达式查询的方法
    这篇文章给大家分享的是有关MySql中使用正则表达式查询的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。正则表达式常用来检索和替换那些符合魔种模式的文本。例如从一个文本文件中...
    99+
    2022-10-18
  • mongodb模糊查询正则表达式使用的方法是什么
    在 MongoDB 中,可以使用正则表达式进行模糊查询。使用正则表达式进行模糊查询的方法是在查询条件中使用 `$regex` 操作符...
    99+
    2023-08-24
    mongodb
  • C++中正则表达式的使用方法详解
    目录介绍1. C++ 中的正则表达式 (Regex)1.1 范围规范1.2 重复模式2. C++正则表达式的例子3. C++正则表达式中使用的函数模板3.1 regex_match(...
    99+
    2022-11-13
  • C#中Lambda表达式的用法
    从C#3.0开始,可以使用lambda表达式把实现代码赋予委托。lambda表达式与委托(https://www.jb51.net/article/244051.htm)直接相关。当...
    99+
    2022-11-13
  • Mybatis Plus的lambda表达式查询异常的处理方法
    今天小编给大家分享一下Mybatis Plus的lambda表达式查询异常的处理方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2023-06-26
  • java中Lamdba表达式的使用方法
    这篇文章主要介绍了java中Lamdba表达式的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、Lamdba若只需要一个参数时,小括号可以省略Consumer<...
    99+
    2023-06-15
  • lambda表达式使用方法
    本篇内容介绍了“lambda表达式使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!package test;import java.u...
    99+
    2023-06-02
  • SQL正则表达式及mybatis中使用正则表达式的方法
    小编给大家分享一下SQL正则表达式及mybatis中使用正则表达式的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql...
    99+
    2022-10-18
  • lambda表达式在java8中的使用方法
    这篇文章给大家介绍lambda表达式在java8中的使用方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。定义 TantanitReader:public class TantanitReader { private ...
    99+
    2023-05-31
    java8 lambda ava
  • Java 中使用正则表达式的方法
    本篇文章给大家分享的是有关Java 中使用正则表达式的方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用RegexString.with(string).pattern(p...
    99+
    2023-05-31
    java 正则表达式 ava
  • Android Studio中使用lambda表达式的方法
    module的build.gradle里buildTypes中添加:compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility Jav...
    99+
    2023-05-31
    android studio lambda
  • C++11lambda表达式在回调函数中的使用方式
    目录一、lambda表达式在C++异步框架中的应用二、如何在C-style注册回调函数中使用lambda表达式?在回调函数中使用lambda表达式的好处,在于可以利用C++的RAII...
    99+
    2022-11-13
    C++11 lambda表达式 使用回调函数 C++11 lambda
  • 达梦数据库SQL查询报错不是 GROUP BY 表达式解决方法
    达梦数据库SQL查询报错:不是 GROUP BY 表达式解决方法 1、前言 随着达梦数据库国产化率越来越高,很多如Oracle、Mysql、SQL Server逐步迁移到达梦数据库上来,但难免会有一些其它数据库独有的用法在达梦上会报错,但达...
    99+
    2023-08-30
    数据库 sql mysql
  • C#中如何使用Lambda表达式
    本篇文章为大家展示了C#中如何使用Lambda表达式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C# Lambda表达式我们从“所有字符串查找包含YJingLee子字符串”说起。在C# 2.0中,...
    99+
    2023-06-17
  • C#中Lambda表达式如何使用
    本篇内容介绍了“C#中Lambda表达式如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、介绍"Lambda表达式&quo...
    99+
    2023-06-30
  • C#中正则表达式(Regex)过滤内容的基本使用方法
    目录命名空间简单了解后开始教程1.读取文本内容2.创建正则表达式3.输出匹配好的内容补充:C#正则表达式筛选去掉不符合的字符总结先看英文意思 命名空间 using System.T...
    99+
    2022-11-13
    c# regex 正则表达式 regex正则表达式 c# regex过滤内容
  • golang三元表达式的使用方法
    golang并没有像C语言一样提供三元表达式。三元表达式的好处是可以用一行代码解决原本需要多行代码才能完成的功能,让冗长的代码瞬间变得简洁。不过对于新手来说,建议还是少用三元表达式。...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作