1.简单形式:
  1. var q =
  2. from p in db.Products
  3. group p by p.CategoryID into g
  4. select g;

语句描述:Linq使用Group By按CategoryID划分产品。

说明:from p in db.Products 表示从表中将产品对象取出来。group p by p.CategoryID into g表示对p按CategoryID字段归类。其结果命名为g,一旦重新命名,p的作用域就结束了,所以,最后select时,只能select g。

2.最大值

  1. var q =
  2. from p in db.Products
  3. group p by p.CategoryID into g
  4. select new {
  5. g.Key,
  6. MaxPrice = g.Max(p => p.UnitPrice)
  7. };

语句描述:Linq使用Group By和Max查找每个CategoryID的最高单价。

说明:先按CategoryID归类,判断各个分类产品中单价最大的Products。取出CategoryID值,并把UnitPrice值赋给MaxPrice。

3.最小值

  1. var q =
  2. from p in db.Products
  3. group p by p.CategoryID into g
  4. select new {
  5. g.Key,
  6. MinPrice = g.Min(p => p.UnitPrice)
  7. };

语句描述:Linq使用Group By和Min查找每个CategoryID的最低单价。

说明:先按CategoryID归类,判断各个分类产品中单价最小的Products。取出CategoryID值,并把UnitPrice值赋给MinPrice。

4.平均值

  1. var q =
  2. from p in db.Products
  3. group p by p.CategoryID into g
  4. select new {
  5. g.Key,
  6. AveragePrice = g.Average(p => p.UnitPrice)
  7. };

语句描述:Linq使用Group By和Average得到每个CategoryID的平均单价。

说明:先按CategoryID归类,取出CategoryID值和各个分类产品中单价的平均值。

5.求和

  1. var q =
  2. from p in db.Products
  3. group p by p.CategoryID into g
  4. select new {
  5. g.Key,
  6. TotalPrice = g.Sum(p => p.UnitPrice)
  7. };

学习Linq时,经常会遇到Linq使用Group By问题,这里将介绍Linq使用Group By问题的解决方法。

1.计数

  1. var q =
  2. from p in db.Products
  3. group p by p.CategoryID into g
  4. select new {
  5. g.Key,
  6. NumProducts = g.Count()
  7. };

语句描述:Linq使用Group By和Count得到每个CategoryID中产品的数量。

说明:先按CategoryID归类,取出CategoryID值和各个分类产品的数量。

2.带条件计数

  1. var q =
  2. from p in db.Products
  3. group p by p.CategoryID into g
  4. select new {
  5. g.Key,
  6. NumProducts = g.Count(p => p.Discontinued)
  7. };

语句描述:Linq使用Group By和Count得到每个CategoryID中断货产品的数量。

说明:先按CategoryID归类,取出CategoryID值和各个分类产品的断货数量。 Count函数里,使用了Lambda表达式,Lambda表达式中的p,代表这个组里的一个元素或对象,即某一个产品。

3.Where限制

  1. var q =
  2. from p in db.Products
  3. group p by p.CategoryID into g
  4. where g.Count() >= 10
  5. select new {
  6. g.Key,
  7. ProductCount = g.Count()
  8. };

语句描述:根据产品的―ID分组,查询产品数量大于10的ID和产品数量。这个示例在Group By子句后使用Where子句查找所有至少有10种产品的类别。

说明:在翻译成SQL语句时,在最外层嵌套了Where条件。

4.多列(Multiple Columns)

  1. var categories =
  2. from p in db.Products
  3. group p by new
  4. {
  5. p.CategoryID,
  6. p.SupplierID
  7. }
  8. into g
  9. select new
  10. {
  11. g.Key,
  12. g
  13. };

语句描述:Linq使用Group By按CategoryID和SupplierID将产品分组。

说明:既按产品的分类,又按供应商分类。在by后面,new出来一个匿名类。这里,Key其实质是一个类的对象,Key包含两个Property:CategoryID、SupplierID。用g.Key.CategoryID可以遍历CategoryID的值。

5.表达式(Expression)

  1. var categories =
  2. from p in db.Products
  3. group p by new { Criterion = p.UnitPrice > 10 } into g
  4. select g;

语句描述:Linq使用Group By返回两个产品序列。第一个序列包含单价大于10的产品。第二个序列包含单价小于或等于10的产品。

说明:按产品单价是否大于10分类。其结果分为两类,大于的是一类,小于及等于为另一类。

描述:根据顾客的国家分组,查询顾客数大于5的国家名和顾客数
查询句法:
var 一般分组 = from c in ctx.Customers
group c by c.Country into g
where g.Count() > 5
orderby g.Count() descending
select new
{
国家 = g.Key,
顾客数 = g.Count()
};
对应SQL:
SELECT [t1].[Country], [t1].[value3] AS [顾客数]
FROM (
SELECT COUNT(*) AS [value], COUNT(*) AS [value2], COUNT(*) AS [value3], [t0].[Country]
FROM [dbo].[Customers] AS [t0]
GROUP BY [t0].[Country]
) AS [t1]
WHERE [t1].[value] > @p0
ORDER BY [t1].[value2] DESC
-- @p0: Input Int32 (Size = 0; Prec = 0; Scale = 0) [5]

描述:根据国家和城市分组,查询顾客覆盖的国家和城市
查询句法:
var 匿名类型分组 = from c in ctx.Customers
group c by new { c.City, c.Country } into g
orderby g.Key.Country, g.Key.City
select new
{
国家 = g.Key.Country,
城市 = g.Key.City
};
描述:按照是否超重条件分组,分别查询订单数量
查询句法:
var 按照条件分组 = from o in ctx.Orders
group o by new { 条件 = o.Freight > 100 } into g
select new
{
数量 = g.Count(),
是否超重 = g.Key.条件 ? "是" : "否"
};

Linq使用Group By相关推荐

  1. Linq使用Group By 1

    1.简单形式: var q = from p in db.Products group p by p.CategoryID into g select g; 语句描述:Linq使用Group By按C ...

  2. Linq学习——Group By

    1.简单形式: var q = from p in db.Products group p by p.CategoryID into g select g; 语句描述:Linq使用Group By按C ...

  3. atitit. groupby linq的实现(1)-----linq框架选型 java .net php

    atitit.  groupby linq的实现(1)-----linq框架选型 java .net php 实现方式有如下 1. Dsl/ Java8 Streams AP ,对象化的查询api , ...

  4. java8 linq4j_Java 8仍然需要LINQ吗? 还是比LINQ更好?

    java8 linq4j 长期以来, LINQ是.NET软件工程生态系统中发生的最好的事情之一. 通过在Visual Studio 2008中引入lambda表达式和monad ,它使C#语言跃居Ja ...

  5. Java 8仍然需要LINQ吗? 还是比LINQ更好?

    长期以来, LINQ是.NET软件工程生态系统中发生的最好的事情之一. 通过在Visual Studio 2008中引入lambda表达式和monads ,它使C#语言比Java(当时的版本6)更先进 ...

  6. Linq之GroupBy用法

    1.简单形式: var q = from p in db.Products group p by p.CategoryID into g select g; 语句描述:Linq使用Group By按C ...

  7. 别再眼高手低了! 这些Linq方法都清楚地掌握了吗?

    不要再眼高手低了,这些Enumerable之常见Linq扩展方法都清楚掌握了吗?其实这是对我自己来说的! 例如:一个人这个技术掌握了一点那个技术也懂一点,其他的好像也了解一些,感觉自己啥都会一点,又觉 ...

  8. mysql分组后组内排名_SQL实现group by 分组后组内排序

    在一个月黑风高的夜晚,自己无聊学习的SQL的时候,练习,突发奇想的想实现一个功能查询,一张成绩表有如下字段,班级ID,英语成绩,数据成绩,语文成绩如下图 实现 查询出 每个班级英语成绩最高的前两名的记 ...

  9. 怎么创建dllwenjian_如何创建DLL文件

    动态链接库(DLL)是从C语言函数库和Pascal库单元的概念发展而来的.所有的C语言标准库函数都存放在某一函数库中.在链接应用程序的过程中,链接器从库文件中拷贝程序调用的函数代码,并把这些函数代码添 ...

最新文章

  1. 当代硕博生常犯错觉大赏:我的idea非常棒,别人肯定想不到!
  2. 唐骏:毕业5年决定你命运
  3. Go 的新关键字 any 是个啥
  4. Python 设计模式之建造者模式 Builder Pattern
  5. BZOJ 2648: SJY摆棋子(K-D Tree)
  6. 推荐几款好用的编程字体
  7. 如何禁用或重新启用计算机的休眠功能
  8. 最新服务器处理器天梯,至强cpu天梯图2020_intel服务器cpu排行榜2020
  9. wsus下游服务器状态,计算机长期没有向WSUS报告状态
  10. WORD里表格复制到另一WORD里表格会变形的解决办法
  11. html 在线汉字转拼音,在线中文转拼音-汉字注音工具_蛙蛙在线工具
  12. Excel vba按指定列号内容插入分页符
  13. Q3财报“牛虎“斗日趋激烈,能否追上美国券商大户“罗宾汉“?
  14. java数组初始化的方式_java数组初始化方式
  15. 史上最全电脑硬盘修复方法
  16. GitChat 最火 Chat 文章合集 | 春节特别版
  17. 创建一个TCP流式套接字
  18. 站长们如何优化自已的新网站
  19. Robust Visual Tracking with a Freely-moving Event Camera
  20. [转贴]LINUX新手入门及安装配置FAQ

热门文章

  1. ITK:概念检查是浮点数
  2. VTK:可视化算法之SpikeFran
  3. VTK:Utilities之WindowModifiedEvent
  4. OpenGL toon shading卡通着色的实例
  5. C++重载(overload)和重写(覆盖)的区别?
  6. c++抽象类在多继承中的应用
  7. dev多行注释_Dev使用技巧
  8. linux中怎样获得进程描述符,linux进程学习-进程描述符,控制块
  9. 封属于旋转轴密封件吗_氧化铝95瓷属于普通型的一种吗?
  10. 04_ClickHouse表引擎概述、MergeTree系列引擎、Log系列引擎、集成引擎、特定功能的引擎(学习笔记)