Linq中GroupBy方法的使用总结-创新互联

Group在SQL经常使用,通常是对一个字段或者多个字段分组,求其总和,均值等。

成都创新互联是一家专注于网站制作、成都网站制作与策划设计,夹江网站建设哪家好?成都创新互联做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:夹江等地区。夹江做网站价格咨询:18982081108

Linq中的Groupby方法也有这种功能。具体实现看代码:

假设有如下的一个数据集:

  1. publicclass
  2. publicintsetget
  3. publicstringsetget
  4. publicstringsetget
  5. publicintsetget
  6. publicstringsetget
  7. new
  8. new"张三""第一学期""Math"
  9. new"张三""第一学期""Chinese"
  10. new"张三""第一学期""English"
  11. new"李四""第一学期""Math"
  12. new"李四""第一学期""Chinese"
  13. new"李四""第一学期""English"
  14. new"王五""第一学期""Math"
  15. new"王五""第一学期""Chinese"
  16. new"王五""第一学期""English"
  17. new"赵六""第一学期""Math"
  18. new"赵六""第一学期""Chinese"
  19. new"赵六""第一学期""English"
  20. new"张三""第二学期""Math"
  21. new"张三""第二学期""Chinese"
  22. new"张三""第二学期""English"
  23. new"李四""第二学期""Math"
  24. new"李四""第二学期""Chinese"
  25. new"李四""第二学期""English"
  26. new"王五""第二学期""Math"
  27. new"王五""第二学期""Chinese"
  28. new"王五""第二学期""English"
  29. new"赵六""第二学期""Math"
  30. new"赵六""第二学期""Chinese"
  31. new"赵六""第二学期""English"

可以把这个数据集想象成数据库中的一个二维表格。

示例一

通常我们会把分组后得到的数据放到匿名对象中,因为分组后的数据的列不一定和原始二维表格的一致。当然要按照原有数据的格式存放也是可以的,只需select的时候采用相应的类型即可。

第一种写法很简单,只是根据下面分组。

  1. //分组,根据姓名,统计Sum的分数,统计结果放在匿名对象中。两种写法。
  2. //第一种写法
  3. "---------第一种写法"
  4. in
  5. new
  6. foreachin
  7. "{0}:总分{1}"
  8. //第二种写法
  9. "---------第二种写法"
  10. new
  11. foreachin
  12. "{0}:总分{1}"

Linq中GroupBy方法的使用总结

示例二

当分组的字段是多个的时候,通常把这多个字段合并成一个匿名对象,然后group by这个匿名对象。

注意:groupby后将数据放到grouped这个变量中,grouped 其实是IGrouping类型的,IGrouping继承了IEnumerable,并且多了一个属性就是Key,这个Key就是当初分组的关键字,即那些值都相同的字段,此处就是该匿名对象。可以在后续的代码中取得这个Key,便于我们编程。

orderby多个字段的时候,在SQL中是用逗号分割多个字段,在Linq中就直接多写几个orderby。

  1. //分组,根据2个条件学期和课程,统计各科均分,统计结果放在匿名对象中。两种写法。
  2. "---------第一种写法"
  3. in
  4. new
  5. new
  6. foreachin
  7. "学期:{0},课程{1},均分{2}"
  8. "---------第二种写法"
  9. new
  10. new
  11. foreachin
  12. "学期:{0},课程{1},均分{2}"

Linq中GroupBy方法的使用总结

示例三

Linq中没有SQL中的Having语句,因此是采用where语句对Group后的结果过滤。

  1. //分组,带有Having的查询,查询均分>80的学生
  2. "---------第一种写法"
  3. in
  4. new
  5. new
  6. foreachin
  7. "姓名:{0},学期{1},均分{2}"
  8. "---------第二种写法"
  9. //此写法看起来较为复杂,第一个Groupby,由于是要对多个字段分组的,因此构建一个匿名对象,
  10. 对这个匿名对象分组,分组得到的其实是一个IEnumberable>这样一个类型。
  11. Where方法接受,和返回的都同样是IEnumberable>类型,
  12. 其中Where方法签名Func委托的类型也就成了Func,bool>,
  13. 之前说到,IGrouping继承了IEnumerable,
  14. 因此这种类型可以有Average,Sum等方法。
  15. new
  16. new
  17. foreachin
  18. "姓名:{0},学期{1},均分{2}"

Linq中GroupBy方法的使用总结

附件:http://down.51cto.com/data/2362114

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文名称:Linq中GroupBy方法的使用总结-创新互联
本文网址:http://pwwzsj.com/article/dhgghh.html