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. js中使用new Date(str)创建时间对象不兼容firefox和ie的解决方式

    /** * 解决 ie,火狐浏览器不兼容new Date(s) * @param strDate * 返回 date对象 * add by zyf at 2015年11月5日 */ function ...

  2. 【ORACLE】ORA-12537 问题整理

    ORA-12537主要是ORALCE 监听问题,今天帮同事处理问题时,他问道一种情况,开始连接很正常,后续多次出现ORA-12537问题 简单整理了下 一般请况下 1-检查数据库服务器是否没有启动监听 ...

  3. UBUNTU 16.04 编译 OPENJDK8

    参考了几篇文章,和错误查询,最后总结如下 一.下载 我比较倾向于使用mercurial来获取源代码,虽然你得挑网络稳定的时候更新,但是易更新. 从官网查找一下,可以通过以下步骤完成源代码的下载 1. ...

  4. jmobile学习之路 ----设备检测

    用一个库,device.js.这是一种最简单的方法.device.js库,不依赖jQuery框架. <!doctype html> <html lang="en" ...

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

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

  6. 无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)

    SQLite部署-无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块 近期刚使用SQLite,主要引用的是System.Data.SQLite.dll这个dll,在部署到测试 ...

  7. Salesforce练习Case

    以下几个SFDC的Case基本覆盖了Force.com平台的一些基本操作流程,大家可以自己动手练习一下 Case 1: 在某公司的业务流程中,有零售店和销售人员两类信息,销售人员是指在零售店中工作的人 ...

  8. 设置label上文字大小、颜色不一样 NSMutableAttributedString的使用

  9. DirectX游戏编程(一):创建一个Direct3D程序

    一.环境 Visual Studio 2012,DirectX SDK (June 2010) 二.准备 1.环境变量(如没有配置请添加) 变量名:DXSDK_DIR 变量值:D:\Software\ ...

  10. myeclipse为表生成持久化对象

    1.连接好数据库之后,右击数据库名,选择open connection, 2.像这样展开: 3.如图选择, 选择之后如下图: 确定即可.