服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - c#中查询表达式GroupBy的使用方法

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

2022-12-07 11:55书蠡 C#

本篇文章介绍一下GroupBy的使用方法,包括实验基础数据用例,通过实例代码给大家介绍的非常详细,需要的朋友跟随小编一起看看吧

说明:

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

实验基础数据用例:

Student类:

?
1
2
3
4
5
6
7
8
public class Student
    {
        public int StuId { get; set; }
 
        public string ClassName { get; set; }
 
        public string StudentName { get; set; }
    }

设定数据如下:

?
1
2
3
4
5
6
7
8
9
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},
            };

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

?
1
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

?
1
2
3
4
foreach (IGrouping<string, Student> item in studentGroup)
            {
                
            }

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

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

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

然后可以foreach下item试一试

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

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

?
1
2
3
4
5
6
7
8
foreach (IGrouping<string, Student> item in studentGroup)
            {
                Console.WriteLine(item.Key);
                foreach (var student in item)
                {
                    Console.WriteLine(student.StudentName);
                }
            }

执行结果如下:

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
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使用内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.cnblogs.com/knightcoming/articles/6107755.html

延伸 · 阅读

精彩推荐
  • C#C#与Java的MD5简单验证(实例代码)

    C#与Java的MD5简单验证(实例代码)

    下面小编就为大家带来一篇C#与Java的MD5简单验证(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    C#教程网7482021-12-07
  • C#Unity常用命令模式详解

    Unity常用命令模式详解

    这篇文章主要为大家详细介绍了Unity常用命令模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    探求虚无10232022-07-11
  • C#C#常用正则验证函数示例

    C#常用正则验证函数示例

    这篇文章主要介绍了C#常用正则验证函数,举例分析了C#针对IP验证、价格验证及正整数验证的相关操作技巧,需要的朋友可以参考下...

    pan_junbiao7552021-12-20
  • C#C#语言中字符类char的使用方法(总结)

    C#语言中字符类char的使用方法(总结)

    下面小编就为大家带来一篇C#语言中字符类char的使用方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    C#教程网7702021-12-30
  • C#WinForm中BackgroundWorker控件用法简单实例

    WinForm中BackgroundWorker控件用法简单实例

    这篇文章主要介绍了WinForm中BackgroundWorker控件用法,以一个简单实例形式分析了BackgroundWorker控件的定义、设置及使用技巧,具有一定参考借鉴价值,需要的朋友...

    我心依旧7382021-10-20
  • C#实例详解C#实现http不同方法的请求

    实例详解C#实现http不同方法的请求

    本篇文章给大家分享了C#实现http不同方法的请求的相关知识点以及实例代码,有需要的朋友参考下。...

    郝光明10752022-02-25
  • C#编辑IL文件 修改DLL文件的方法

    编辑IL文件 修改DLL文件的方法

    下面小编就为大家带来一篇编辑IL文件 修改DLL文件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    C#教程网10632021-12-27
  • C#Unity实现简单手势识别

    Unity实现简单手势识别

    这篇文章主要为大家详细介绍了Unity实现简单手势识别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Maddie_Mo10312022-09-24