千家信息网

c#中查询表达式GroupBy怎么用

发表于:2024-10-01 作者:千家信息网编辑
千家信息网最后更新 2024年10月01日,这篇文章主要介绍c#中查询表达式GroupBy怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实验基础数据用例:Student类:public class Student
千家信息网最后更新 2024年10月01日c#中查询表达式GroupBy怎么用

这篇文章主要介绍c#中查询表达式GroupBy怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

实验基础数据用例:

Student类:

public class Student    {        public int StuId { get; set; }        public string ClassName { get; set; }        public string StudentName { get; set; }    }

设定数据如下:

List studentList = new List            {                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> studentGroup = studentList.GroupBy(s => s.ClassName);

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

可以首先foreach一下studentGroup

foreach (IGrouping item in studentGroup)            {                            }

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

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

然后可以foreach下item试一试

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

foreach (IGrouping item in studentGroup)            {                Console.WriteLine(item.Key);                foreach (var student in item)                {                    Console.WriteLine(student.StudentName);                }            }

执行结果如下:

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

public interface IGrouping : IEnumerable, IEnumerable  {    ///     /// 获取  的键。    ///     ///     ///     ///  的键。    ///     [__DynamicallyInvokable]    TKey Key { [__DynamicallyInvokable] get; }  }

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

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

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

以上是"c#中查询表达式GroupBy怎么用"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

0