1. 简单形式

  1. var expr = from p in context.Products
  2. group p by p.CategoryID into g
  3. select g;
  4.  
  5. foreach (var item in expr)
  6. {
  7. Console.WriteLine(item.Key);
  8.  
  9. foreach (var p in item)
  10. {
  11. Console.WriteLine("{0}-{1}", p.ProductID, p.ProductName);
  12. }
  13. }
  1. SELECT
  2. [Project2].[CategoryID] AS [CategoryID],
  3. [Project2].[C1] AS [C1],
  4. [Project2].[ProductID] AS [ProductID],
  5. [Project2].[CategoryID1] AS [CategoryID1],
  6. [Project2].[ProductName] AS [ProductName],
  7. [Project2].[UnitPrice] AS [UnitPrice],
  8. [Project2].[UnitsInStock] AS [UnitsInStock],
  9. [Project2].[Discontinued] AS [Discontinued]
  10. FROM ( SELECT
  11. [Distinct1].[CategoryID] AS [CategoryID],
  12. [Extent2].[ProductID] AS [ProductID],
  13. [Extent2].[CategoryID] AS [CategoryID1],
  14. [Extent2].[ProductName] AS [ProductName],
  15. [Extent2].[UnitPrice] AS [UnitPrice],
  16. [Extent2].[UnitsInStock] AS [UnitsInStock],
  17. [Extent2].[Discontinued] AS [Discontinued],
  18. CASE WHEN ([Extent2].[ProductID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1]
  19. FROM (SELECT DISTINCT
  20. [Extent1].[CategoryID] AS [CategoryID]
  21. FROM [dbo].[Product] AS [Extent1] ) AS [Distinct1]
  22. LEFT OUTER JOIN [dbo].[Product] AS [Extent2] ON [Distinct1].[CategoryID] = [Extent2].[CategoryID]
  23. ) AS [Project2]
  24. ORDER BY [Project2].[CategoryID] ASC, [Project2].[C1] ASC

2. 最大值

  1. var expr = from p in context.Products
  2. group p by p.CategoryID into g
  3. select new
  4. {
  5. g.Key,
  6. MaxUnitPrice = g.Max(p => p.UnitPrice)
  7. };
  8.  
  9. foreach (var item in expr)
  10. {
  11. Console.WriteLine("{0}-{1}", item.Key, item.MaxUnitPrice);
  12. }
  1. SELECT
  2. [GroupBy1].[K1] AS [CategoryID],
  3. [GroupBy1].[A1] AS [C1]
  4. FROM ( SELECT
  5. [Extent1].[CategoryID] AS [K1],
  6. MAX([Extent1].[UnitPrice]) AS [A1]
  7. FROM [dbo].[Product] AS [Extent1]
  8. GROUP BY [Extent1].[CategoryID]
  9. ) AS [GroupBy1]

3. 最小值

  1. var expr = from p in context.Products
  2. group p by p.CategoryID into g
  3. select new
  4. {
  5. g.Key,
  6. MinUnitPrice = g.Min(p => p.UnitPrice)
  7. };
  1. SELECT
  2. [GroupBy1].[K1] AS [CategoryID],
  3. [GroupBy1].[A1] AS [C1]
  4. FROM ( SELECT
  5. [Extent1].[CategoryID] AS [K1],
  6. MIN([Extent1].[UnitPrice]) AS [A1]
  7. FROM [dbo].[Product] AS [Extent1]
  8. GROUP BY [Extent1].[CategoryID]
  9. ) AS [GroupBy1]

4. 平均值

  1. var expr = from p in context.Products
  2. group p by p.CategoryID into g
  3. select new
  4. {
  5. g.Key,
  6. AverageUnitPrice = g.Average(p => p.UnitPrice)
  7. };
  1. SELECT
  2. [GroupBy1].[K1] AS [CategoryID],
  3. [GroupBy1].[A1] AS [C1]
  4. FROM ( SELECT
  5. [Extent1].[CategoryID] AS [K1],
  6. AVG([Extent1].[UnitPrice]) AS [A1]
  7. FROM [dbo].[Product] AS [Extent1]
  8. GROUP BY [Extent1].[CategoryID]
  9. ) AS [GroupBy1]

5. 求和

  1. var expr = from p in context.Products
  2. group p by p.CategoryID into g
  3. select new
  4. {
  5. g.Key,
  6. TotalUnitPrice = g.Sum(p => p.UnitPrice)
  7. };
  1. SELECT
  2. [GroupBy1].[K1] AS [CategoryID],
  3. [GroupBy1].[A1] AS [C1]
  4. FROM ( SELECT
  5. [Extent1].[CategoryID] AS [K1],
  6. SUM([Extent1].[UnitPrice]) AS [A1]
  7. FROM [dbo].[Product] AS [Extent1]
  8. GROUP BY [Extent1].[CategoryID]
  9. ) AS [GroupBy1]

6. 计数

  1. var expr = from g in
  2. from p in context.Products
  3. group p by p.CategoryID
  4. select new
  5. {
  6. CategoryID = g.Key,
  7. ProductsNumber = g.Count()
  8. };
  1. var expr = from p in context.Products
  2. group p by p.CategoryID into g
  3. select new
  4. {
  5. g.Key,
  6. ProductNumber = g.Count()
  7. };
  1. var expr = context.Products
  2. .GroupBy(p => p.CategoryID)
  3. .Select(g => new
  4. {
  5. CategoryID = g.Key,
  6. ProductNumber = g.Count()
  7. });
  1. SELECT
  2. [GroupBy1].[K1] AS [CategoryID],
  3. [GroupBy1].[A1] AS [C1]
  4. FROM ( SELECT
  5. [Extent1].[CategoryID] AS [K1],
  6. COUNT(1) AS [A1]
  7. FROM [dbo].[Product] AS [Extent1]
  8. GROUP BY [Extent1].[CategoryID]
  9. ) AS [GroupBy1]
  1. var expr = from p in context.Products
  2. group p by p.CategoryID into g
  3. select new
  4. {
  5. g.Key,
  6. ProductNumber = g.Count(p => p.UnitsInStock > )
  7. };

7. Where限制

  1. var expr = from p in context.Products
  2. group p by p.CategoryID into g
  3. where g.Count() >
  4. select new
  5. {
  6. g.Key,
  7. ProductNumber = g.Count()
  8. };
  1. SELECT
  2. [GroupBy1].[K1] AS [CategoryID],
  3. [GroupBy1].[A2] AS [C1]
  4. FROM ( SELECT
  5. [Extent1].[CategoryID] AS [K1],
  6. COUNT(1) AS [A1],
  7. COUNT(1) AS [A2]
  8. FROM [dbo].[Product] AS [Extent1]
  9. GROUP BY [Extent1].[CategoryID]
  10. ) AS [GroupBy1]
  11. WHERE [GroupBy1].[A1] > 10

8. 多列分组

  1. var expr = from p in context.Products
  2. group p by new
  3. {
  4. p.CategoryID,
  5. p.Discontinued
  6. }
  7. into g
  8. select new
  9. {
  10. g.Key,
  11. ProductNumber = g.Count()
  12. };
  1. SELECT
  2. [GroupBy1].[K1] AS [CategoryID],
  3. [GroupBy1].[K3] AS [C1],
  4. [GroupBy1].[K2] AS [Discontinued],
  5. [GroupBy1].[A1] AS [C2]
  6. FROM ( SELECT
  7. [Extent1].[K1] AS [K1],
  8. [Extent1].[K2] AS [K2],
  9. [Extent1].[K3] AS [K3],
  10. COUNT([Extent1].[A1]) AS [A1]
  11. FROM ( SELECT
  12. [Extent1].[CategoryID] AS [K1],
  13. [Extent1].[Discontinued] AS [K2],
  14. 1 AS [K3],
  15. 1 AS [A1]
  16. FROM [dbo].[Product] AS [Extent1]
  17. ) AS [Extent1]
  18. GROUP BY [K1], [K2], [K3]
  19. ) AS [GroupBy1]
  1. var expr = from p in context.Products
  2. group p by new
  3. {
  4. p.CategoryID,
  5. p.Discontinued
  6. }
  7. into g
  8. select new
  9. {
  10. g.Key.CategoryID,
  11. ProductNumber = g.Count()
  12. };
  1. SELECT
  2. [GroupBy1].[K1] AS [CategoryID],
  3. [GroupBy1].[A1] AS [C1]
  4. FROM ( SELECT
  5. [Extent1].[CategoryID] AS [K1],
  6. [Extent1].[Discontinued] AS [K2],
  7. COUNT(1) AS [A1]
  8. FROM [dbo].[Product] AS [Extent1]
  9. GROUP BY [Extent1].[CategoryID], [Extent1].[Discontinued]
  10. ) AS [GroupBy1]

9. 表达式

  1. var expr = from p in context.Products
  2. group p by new
  3. {
  4. Criteria = p.UnitPrice > 10m
  5. }
  6. into g
  7. select new
  8. {
  9. g.Key,
  10. ProductNumber = g.Count()
  11. };

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

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

  1. SELECT
  2. [GroupBy1].[K1] AS [C1],
  3. [GroupBy1].[K2] AS [C2],
  4. [GroupBy1].[A1] AS [C3]
  5. FROM ( SELECT
  6. [Extent1].[K1] AS [K1],
  7. [Extent1].[K2] AS [K2],
  8. COUNT([Extent1].[A1]) AS [A1]
  9. FROM ( SELECT
  10. 1 AS [K1],
  11. CASE WHEN ([Extent1].[UnitPrice] > cast(10 as decimal(18))) THEN cast(1 as bit) WHEN ( NOT ([Extent1].[UnitPrice] > cast(10 as decimal(18)))) THEN cast(0 as bit) END AS [K2],
  12. 1 AS [A1]
  13. FROM [dbo].[Product] AS [Extent1]
  14. ) AS [Extent1]
  15. GROUP BY [K1], [K2]
  16. ) AS [GroupBy1]

10. 多表连接查询

  1. var expr = from d in context.OrderDetails
  2. join o in context.Orders on d.OrderID equals o.OrderID
  3. join p in context.Products on d.ProductID equals p.ProductID
  4. select new
  5. {
  6. o.OrderID,
  7. o.UserID,
  8. p.ProductID,
  9. p.ProductName,
  10. d.Quantity
  11. };
  1. SELECT
  2. [Extent2].[OrderID] AS [OrderID],
  3. [Extent2].[UserID] AS [UserID],
  4. [Extent3].[ProductID] AS [ProductID],
  5. [Extent3].[ProductName] AS [ProductName],
  6. [Extent1].[Quantity] AS [Quantity]
  7. FROM [dbo].[OrderDetail] AS [Extent1]
  8. INNER JOIN [dbo].[Order] AS [Extent2] ON [Extent1].[OrderID] = [Extent2].[OrderID]
  9. INNER JOIN [dbo].[Product] AS [Extent3] ON [Extent1].[ProductID] = [Extent3].[ProductID]

LINQ系列:LINQ to SQL Group by/Having分组的更多相关文章

  1. C# ~ 从 XML 到 Linq 到 Linq to XML

    .XML 可扩展标记语言 (Extensible Markup Language), 标记 (markup) 是关键部分,是标准通用标记语言 (Standard Generalized Markup ...

  2. LINQ TO SQL ——Group by

    原文:LINQ TO SQL --Group by 分组在SQL中应用的十分普遍,在查询,统计时都有可能会用到它.LINQ TO SQL中同样具备group的功能,这篇我来讲下LINQ TO SQL中 ...

  3. LINQ系列目录

    1. LINQ准备 1.1 C#中与LINQ相关特性 2. LINQ to Object 2.1 LINQ to Object投影操作符(Select/SelectMany/Let) 2.2 LINQ ...

  4. Linq之Linq to Sql

    目录 写在前面 系列文章 Linq to sql 总结 写在前面 上篇文章介绍了linq to xml的相关内容,linq to xml提供一种更便捷的创建xml树,及查询的途径.这篇文章将继续介绍l ...

  5. LinQ系列文章

    温故而知新,想着系统再学习一次LinQ知识点,发现园子里有个非常棒的系列文章,所以Mark下来,方便以后查阅! 系列博客导航: LINQ之路系列博客导航 LINQ之路 1:LINQ介绍 LINQ之路 ...

  6. C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换

    LINQ to DataSet需要使用System.Core.dll.System.Data.dll和System.Data.DataSetExtensions.dll,在项目中添加引用System. ...

  7. LINQ 系列

    C#图解教程 第十九章 LINQ   LINQ 什么是LINQLINQ提供程序 匿名类型 方法语法和查询语法查询变量查询表达式的结构 from子句join子句什么是联结查询主体中的from…let…w ...

  8. SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总

    SQL Server游标   转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...

  9. IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题

    IT咨询顾问:一次吐血的项目救火   年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登 ...

随机推荐

  1. Codeforces663E Binary Table(FWT)

    题目 Source http://codeforces.com/contest/663/problem/E Description You are given a table consisting o ...

  2. 德国W家HIPP 奶粉有货播报:2014.7.8 HIPP 奶粉 1+ 4盒装有货啦!

    德国W家HIPP 奶粉有货播报:2014.7.8 HIPP 奶粉 1+ 4盒装有货啦!

  3. oracle 和c3p0 数据库的Time_Wait 过多问题的一个解决方案。

    项目是B/S模式,放在linux服务器上,tomcat和oracle11g在一台服务器上,tomcat读取数据库采用C3P0连接池,一直比较稳定,所以也没有去管.后来把tomcat放在一台win200 ...

  4. 通读SDWebImage①--总体梳理、下载和缓存

    本文目录 下载操作SDWebImageDownloaderOptions和下载过程实现 下载管理SDWebImageDownloader 缓存SDImageCache SDWebImageManage ...

  5. ajax的一些笔试面试题

    1. 什么是ajax,为什么要使用Ajax(请谈一下你对Ajax的认识) 什么是ajax: AJAX是“Asynchronous JavaScript and XML”的缩写.他是指一种创建交互式网页 ...

  6. 用SQL Server(T-SQL)获取连接字符串

    一般情况下,C# 连接SQL Server的字符串可以直接按照说明文档直接手动写出来,或者也可以参考大名鼎鼎的connectionstrings手动拼写 但是如果你已经连接到SQL Server也可以 ...

  7. Xcode 升级后,常常遇到的遇到的警告、错误,解决方法(转)

    从sdk3.2.5升级到sdk 7.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了.1,警告:“xoxoxoxo”  is deprecated解决办法:查看xoxoxoxo的这个方法的文档,替换 ...

  8. 下载判断Android和iOS

    //下载 function down(){ var url = ''; var u = navigator.userAgent, app = navigator.appVersion; var isA ...

  9. 最近碰到的一些 SSL 问题记录

    最近碰到一些 SSL 的小问题,特记录下. 我们有个 Java 实现的 SSL TCP 服务端,为客户端(PC.Android 和 iOS)提供 SSL 接入连接服务.最近有用户反馈其手机上 App ...

  10. .NET 4.0 版本号

    .NET 4.5.1, .NET 4.5 和 .NET 4.0 均基于 .NET 4.0 CLR,而 .NET 4.5 对 CLR进行了升级和Bug修复. .NET 4.0 - 4.0.30319.1 ...