LINQ系列:LINQ to SQL Group by/Having分组
1. 简单形式
- var expr = from p in context.Products
- group p by p.CategoryID into g
- select g;
- foreach (var item in expr)
- {
- Console.WriteLine(item.Key);
- foreach (var p in item)
- {
- Console.WriteLine("{0}-{1}", p.ProductID, p.ProductName);
- }
- }
- SELECT
- [Project2].[CategoryID] AS [CategoryID],
- [Project2].[C1] AS [C1],
- [Project2].[ProductID] AS [ProductID],
- [Project2].[CategoryID1] AS [CategoryID1],
- [Project2].[ProductName] AS [ProductName],
- [Project2].[UnitPrice] AS [UnitPrice],
- [Project2].[UnitsInStock] AS [UnitsInStock],
- [Project2].[Discontinued] AS [Discontinued]
- FROM ( SELECT
- [Distinct1].[CategoryID] AS [CategoryID],
- [Extent2].[ProductID] AS [ProductID],
- [Extent2].[CategoryID] AS [CategoryID1],
- [Extent2].[ProductName] AS [ProductName],
- [Extent2].[UnitPrice] AS [UnitPrice],
- [Extent2].[UnitsInStock] AS [UnitsInStock],
- [Extent2].[Discontinued] AS [Discontinued],
- CASE WHEN ([Extent2].[ProductID] IS NULL) THEN CAST(NULL AS int) ELSE 1 END AS [C1]
- FROM (SELECT DISTINCT
- [Extent1].[CategoryID] AS [CategoryID]
- FROM [dbo].[Product] AS [Extent1] ) AS [Distinct1]
- LEFT OUTER JOIN [dbo].[Product] AS [Extent2] ON [Distinct1].[CategoryID] = [Extent2].[CategoryID]
- ) AS [Project2]
- ORDER BY [Project2].[CategoryID] ASC, [Project2].[C1] ASC
2. 最大值
- var expr = from p in context.Products
- group p by p.CategoryID into g
- select new
- {
- g.Key,
- MaxUnitPrice = g.Max(p => p.UnitPrice)
- };
- foreach (var item in expr)
- {
- Console.WriteLine("{0}-{1}", item.Key, item.MaxUnitPrice);
- }
- SELECT
- [GroupBy1].[K1] AS [CategoryID],
- [GroupBy1].[A1] AS [C1]
- FROM ( SELECT
- [Extent1].[CategoryID] AS [K1],
- MAX([Extent1].[UnitPrice]) AS [A1]
- FROM [dbo].[Product] AS [Extent1]
- GROUP BY [Extent1].[CategoryID]
- ) AS [GroupBy1]
3. 最小值
- var expr = from p in context.Products
- group p by p.CategoryID into g
- select new
- {
- g.Key,
- MinUnitPrice = g.Min(p => p.UnitPrice)
- };
- SELECT
- [GroupBy1].[K1] AS [CategoryID],
- [GroupBy1].[A1] AS [C1]
- FROM ( SELECT
- [Extent1].[CategoryID] AS [K1],
- MIN([Extent1].[UnitPrice]) AS [A1]
- FROM [dbo].[Product] AS [Extent1]
- GROUP BY [Extent1].[CategoryID]
- ) AS [GroupBy1]
4. 平均值
- var expr = from p in context.Products
- group p by p.CategoryID into g
- select new
- {
- g.Key,
- AverageUnitPrice = g.Average(p => p.UnitPrice)
- };
- SELECT
- [GroupBy1].[K1] AS [CategoryID],
- [GroupBy1].[A1] AS [C1]
- FROM ( SELECT
- [Extent1].[CategoryID] AS [K1],
- AVG([Extent1].[UnitPrice]) AS [A1]
- FROM [dbo].[Product] AS [Extent1]
- GROUP BY [Extent1].[CategoryID]
- ) AS [GroupBy1]
5. 求和
- var expr = from p in context.Products
- group p by p.CategoryID into g
- select new
- {
- g.Key,
- TotalUnitPrice = g.Sum(p => p.UnitPrice)
- };
- SELECT
- [GroupBy1].[K1] AS [CategoryID],
- [GroupBy1].[A1] AS [C1]
- FROM ( SELECT
- [Extent1].[CategoryID] AS [K1],
- SUM([Extent1].[UnitPrice]) AS [A1]
- FROM [dbo].[Product] AS [Extent1]
- GROUP BY [Extent1].[CategoryID]
- ) AS [GroupBy1]
6. 计数
- var expr = from g in
- from p in context.Products
- group p by p.CategoryID
- select new
- {
- CategoryID = g.Key,
- ProductsNumber = g.Count()
- };
- var expr = from p in context.Products
- group p by p.CategoryID into g
- select new
- {
- g.Key,
- ProductNumber = g.Count()
- };
- var expr = context.Products
- .GroupBy(p => p.CategoryID)
- .Select(g => new
- {
- CategoryID = g.Key,
- ProductNumber = g.Count()
- });
- SELECT
- [GroupBy1].[K1] AS [CategoryID],
- [GroupBy1].[A1] AS [C1]
- FROM ( SELECT
- [Extent1].[CategoryID] AS [K1],
- COUNT(1) AS [A1]
- FROM [dbo].[Product] AS [Extent1]
- GROUP BY [Extent1].[CategoryID]
- ) AS [GroupBy1]
- var expr = from p in context.Products
- group p by p.CategoryID into g
- select new
- {
- g.Key,
- ProductNumber = g.Count(p => p.UnitsInStock > )
- };
7. Where限制
- var expr = from p in context.Products
- group p by p.CategoryID into g
- where g.Count() >
- select new
- {
- g.Key,
- ProductNumber = g.Count()
- };
- SELECT
- [GroupBy1].[K1] AS [CategoryID],
- [GroupBy1].[A2] AS [C1]
- FROM ( SELECT
- [Extent1].[CategoryID] AS [K1],
- COUNT(1) AS [A1],
- COUNT(1) AS [A2]
- FROM [dbo].[Product] AS [Extent1]
- GROUP BY [Extent1].[CategoryID]
- ) AS [GroupBy1]
- WHERE [GroupBy1].[A1] > 10
8. 多列分组
- var expr = from p in context.Products
- group p by new
- {
- p.CategoryID,
- p.Discontinued
- }
- into g
- select new
- {
- g.Key,
- ProductNumber = g.Count()
- };
- SELECT
- [GroupBy1].[K1] AS [CategoryID],
- [GroupBy1].[K3] AS [C1],
- [GroupBy1].[K2] AS [Discontinued],
- [GroupBy1].[A1] AS [C2]
- FROM ( SELECT
- [Extent1].[K1] AS [K1],
- [Extent1].[K2] AS [K2],
- [Extent1].[K3] AS [K3],
- COUNT([Extent1].[A1]) AS [A1]
- FROM ( SELECT
- [Extent1].[CategoryID] AS [K1],
- [Extent1].[Discontinued] AS [K2],
- 1 AS [K3],
- 1 AS [A1]
- FROM [dbo].[Product] AS [Extent1]
- ) AS [Extent1]
- GROUP BY [K1], [K2], [K3]
- ) AS [GroupBy1]
- var expr = from p in context.Products
- group p by new
- {
- p.CategoryID,
- p.Discontinued
- }
- into g
- select new
- {
- g.Key.CategoryID,
- ProductNumber = g.Count()
- };
- SELECT
- [GroupBy1].[K1] AS [CategoryID],
- [GroupBy1].[A1] AS [C1]
- FROM ( SELECT
- [Extent1].[CategoryID] AS [K1],
- [Extent1].[Discontinued] AS [K2],
- COUNT(1) AS [A1]
- FROM [dbo].[Product] AS [Extent1]
- GROUP BY [Extent1].[CategoryID], [Extent1].[Discontinued]
- ) AS [GroupBy1]
9. 表达式
- var expr = from p in context.Products
- group p by new
- {
- Criteria = p.UnitPrice > 10m
- }
- into g
- select new
- {
- g.Key,
- ProductNumber = g.Count()
- };
语句描述 :使用Group By返回两个产品序列。第一个序列包含单价大于10的产品。第二个序列包含单价小于或等于10的产品。
说明:按产品单价是否大于10分类 。其结果分为两类,大于的是一类,小于或等于是另一类。
- SELECT
- [GroupBy1].[K1] AS [C1],
- [GroupBy1].[K2] AS [C2],
- [GroupBy1].[A1] AS [C3]
- FROM ( SELECT
- [Extent1].[K1] AS [K1],
- [Extent1].[K2] AS [K2],
- COUNT([Extent1].[A1]) AS [A1]
- FROM ( SELECT
- 1 AS [K1],
- 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],
- 1 AS [A1]
- FROM [dbo].[Product] AS [Extent1]
- ) AS [Extent1]
- GROUP BY [K1], [K2]
- ) AS [GroupBy1]
10. 多表连接查询
- var expr = from d in context.OrderDetails
- join o in context.Orders on d.OrderID equals o.OrderID
- join p in context.Products on d.ProductID equals p.ProductID
- select new
- {
- o.OrderID,
- o.UserID,
- p.ProductID,
- p.ProductName,
- d.Quantity
- };
- SELECT
- [Extent2].[OrderID] AS [OrderID],
- [Extent2].[UserID] AS [UserID],
- [Extent3].[ProductID] AS [ProductID],
- [Extent3].[ProductName] AS [ProductName],
- [Extent1].[Quantity] AS [Quantity]
- FROM [dbo].[OrderDetail] AS [Extent1]
- INNER JOIN [dbo].[Order] AS [Extent2] ON [Extent1].[OrderID] = [Extent2].[OrderID]
- INNER JOIN [dbo].[Product] AS [Extent3] ON [Extent1].[ProductID] = [Extent3].[ProductID]
LINQ系列:LINQ to SQL Group by/Having分组的更多相关文章
- C# ~ 从 XML 到 Linq 到 Linq to XML
.XML 可扩展标记语言 (Extensible Markup Language), 标记 (markup) 是关键部分,是标准通用标记语言 (Standard Generalized Markup ...
- LINQ TO SQL ——Group by
原文:LINQ TO SQL --Group by 分组在SQL中应用的十分普遍,在查询,统计时都有可能会用到它.LINQ TO SQL中同样具备group的功能,这篇我来讲下LINQ TO SQL中 ...
- LINQ系列目录
1. LINQ准备 1.1 C#中与LINQ相关特性 2. LINQ to Object 2.1 LINQ to Object投影操作符(Select/SelectMany/Let) 2.2 LINQ ...
- Linq之Linq to Sql
目录 写在前面 系列文章 Linq to sql 总结 写在前面 上篇文章介绍了linq to xml的相关内容,linq to xml提供一种更便捷的创建xml树,及查询的途径.这篇文章将继续介绍l ...
- LinQ系列文章
温故而知新,想着系统再学习一次LinQ知识点,发现园子里有个非常棒的系列文章,所以Mark下来,方便以后查阅! 系列博客导航: LINQ之路系列博客导航 LINQ之路 1:LINQ介绍 LINQ之路 ...
- C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换
LINQ to DataSet需要使用System.Core.dll.System.Data.dll和System.Data.DataSetExtensions.dll,在项目中添加引用System. ...
- LINQ 系列
C#图解教程 第十九章 LINQ LINQ 什么是LINQLINQ提供程序 匿名类型 方法语法和查询语法查询变量查询表达式的结构 from子句join子句什么是联结查询主体中的from…let…w ...
- SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总
SQL Server游标 转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
IT咨询顾问:一次吐血的项目救火 年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登 ...
随机推荐
- Codeforces663E Binary Table(FWT)
题目 Source http://codeforces.com/contest/663/problem/E Description You are given a table consisting o ...
- 德国W家HIPP 奶粉有货播报:2014.7.8 HIPP 奶粉 1+ 4盒装有货啦!
德国W家HIPP 奶粉有货播报:2014.7.8 HIPP 奶粉 1+ 4盒装有货啦!
- oracle 和c3p0 数据库的Time_Wait 过多问题的一个解决方案。
项目是B/S模式,放在linux服务器上,tomcat和oracle11g在一台服务器上,tomcat读取数据库采用C3P0连接池,一直比较稳定,所以也没有去管.后来把tomcat放在一台win200 ...
- 通读SDWebImage①--总体梳理、下载和缓存
本文目录 下载操作SDWebImageDownloaderOptions和下载过程实现 下载管理SDWebImageDownloader 缓存SDImageCache SDWebImageManage ...
- ajax的一些笔试面试题
1. 什么是ajax,为什么要使用Ajax(请谈一下你对Ajax的认识) 什么是ajax: AJAX是“Asynchronous JavaScript and XML”的缩写.他是指一种创建交互式网页 ...
- 用SQL Server(T-SQL)获取连接字符串
一般情况下,C# 连接SQL Server的字符串可以直接按照说明文档直接手动写出来,或者也可以参考大名鼎鼎的connectionstrings手动拼写 但是如果你已经连接到SQL Server也可以 ...
- Xcode 升级后,常常遇到的遇到的警告、错误,解决方法(转)
从sdk3.2.5升级到sdk 7.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了.1,警告:“xoxoxoxo” is deprecated解决办法:查看xoxoxoxo的这个方法的文档,替换 ...
- 下载判断Android和iOS
//下载 function down(){ var url = ''; var u = navigator.userAgent, app = navigator.appVersion; var isA ...
- 最近碰到的一些 SSL 问题记录
最近碰到一些 SSL 的小问题,特记录下. 我们有个 Java 实现的 SSL TCP 服务端,为客户端(PC.Android 和 iOS)提供 SSL 接入连接服务.最近有用户反馈其手机上 App ...
- .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 ...