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分组的更多相关文章

  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. startssl申请配置免费https证书

    之前给业务配置都是在沃通上申请免费证书,而后通过反向代理层的Nginx进行https认证. 今天来了个新需求,要求域名直接解析至阿里云SLB.https配置需要通过阿里云的控制台部署这倒无所谓,只是在 ...

  2. Ajax跨域问题的两种解决方法

    浏览器不允许Ajax跨站请求,所以存在Ajax跨域问题,目前主要有两种办法解决. 1.在请求页面上使用Access-Control-Allow-Origin标头. 使用如下标头可以接受全部网站请求: ...

  3. 【ORACLE】 表空间信息

    Linux 查看磁盘空间命令 格式: df -hl 显示格式为: 文件系统 容量 已用 可用 已用% 挂载点 [root@localhost opt]# dfFilesystem     1K-blo ...

  4. python os.path模块

    os.path.abspath(path) #返回绝对路径 os.path.basename(path) #返回文件名 os.path.commonprefix(list) #返回list(多个路径) ...

  5. 第一个Mac shell 小脚本

    大多数程序员都喜欢偷懒的,我也不例外.相信好多Android开发的coder 在网络http请求方面,会浪费很多时间在接口调试这里..有时候,自己写了一个小测试,行还好,不行的话,还要跟写后台的哥们一 ...

  6. jmobile学习之路 ----检测屏幕宽度

    <script type="text/javascript"> window.onresize = function(){ var myh1 = document.ge ...

  7. React-Native需要css和布局-20160902

    import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Text, View, } from 'reac ...

  8. MemCache 启动

    这个MemCache在园子里面的文章也很多,这里只是我自己记录作下笔记 MemCache的官方网站为http://memcached.org/ 启动与关闭memCache # /usr/local/m ...

  9. js中几种常用的输出方式

    1.alert("要输出的内容"); ->在浏览器中弹出一个对话框,然后把要输出的内容展示出来 ->alert都是把要输出的内容首先转换为字符串然后在输出的 2.doc ...

  10. Linux 下安装中文 ctex 指南

    大家在用 $\LaTeX$ 进行中文排版时相信会遇到不少问题,而$\textbf{ctex}$套装的出现则有效的解决了这一问题,只要安装了$\textbf{ctex}$那么在文中不用进行引用设置就可以 ...