惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
云风的 BLOG
云风的 BLOG
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
J
Java Code Geeks
博客园 - 聂微东
B
Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学
腾讯CDC
L
LangChain Blog
Apple Machine Learning Research
Apple Machine Learning Research
Microsoft Azure Blog
Microsoft Azure Blog
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
美团技术团队
博客园 - Franky
Google DeepMind News
Google DeepMind News
V
V2EX
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
The Cloudflare Blog

博客园 - mapserver

MicroOrm.Net和现有ORM产品的对比 MicroOrm.Net(8) Table.Query() - Distinct、Skip & Take MicroOrm.Net(6) Table.Query() - Join & Order By MicroOrm.Net(5) Table.Query() - Select MicroOrm.Net(4) Table.Query() - Where MicroOrm.Net(3) Database、Table、Column、Expression、Math&MathE MicroOrm.Net(2) 基础及动态特性 MicroOrm.Net(1) 总览 Asp.net服务器控件编程(6) ViewState(二)——ViewState用法和IStateManager Asp.net服务器控件编程(5) 复杂属性 Asp.net服务器控件编程(4) 呈现 Asp.net服务器控件编程(3) ViewState(一)——asp.net控件的精华之一 Asp.net服务器控件编程(2) 来做个热身运动吧 Asp.net服务器控件编程(1) 开篇、基础 Asp.net服务器控件编程 总览 TextDataSource(3) — 请把我的数据更新回去 TextDataSource(2) — 翠花,上“数据” TextDataSource(1) — DataSourceControl内幕 .NET组件编程(10) 补充 ISupportInitialize
MicroOrm.Net(7) Table.Query() - Group By & Having
mapserver · 2012-04-12 · via 博客园 - mapserver

MicroOrm.Net主页:

http://code.google.com/p/micro-orm-net/

MicroOrm.Net系列随便目录总览:

http://www.cnblogs.com/mapserver/archive/2012/04/07/2436129.html

本文我们来讲解MicroOrm.Net的Group By和Having的用法,请看Group By的api:

Query GroupBy(params Column[] columns)

方法的参数只有Column集合这一种类型,用法很简单,请看下面的代码:

db.OrderDetail.Query()
        .GroupBy(db.OrderDetail.ProductId)

熟悉SQL的同学都知道,在Group By和Select配合使用的时候,出现在Group By子句中的Column可以被直接Select,没有出现在Group By子句中的Column必须经过聚合后才能被Select

db.OrderDetail.Query()

        .GroupBy(db.OrderDetail.ProductId)

        .Select(db.OrderDetail.OrderId)

上面的代码将会出错,因为Select子句里的OrderDetail.OrderId未出现在Group By子句中,同时也没有被聚合。

上面的代码等价于如下的SQL:

select OrderId from OrderDetail group by ProductId 

执行这句SQL,SQL Server报错信息如下:

Msg 8120, Level 16, State 1, Line 1
Column 'OrderDetail.OrderId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Group By时,Select使用Column聚合函数代码如下:

db.OrderDetail.Query()
        .GroupBy(db.Order.ProductId)
        .Select(db.Order.ProductId, db.OrderDetail.Qty.Sum().As("Sum"))

Having一般都和Group By搭配来使用,上面我们演示了Group By的用法,我们再来看看Having的用法,至于到底什么是Having,请大家自己去Google

Having方法的api:

Query Having(Expression criteria)

在Group By子句中出现的Column,能直接在Having方法Expression里使用;未出现在Group By子句里的Column,要在Having方法Expression里使用时,必须要聚合。这和上面Group By后Select一样。

db.OrderDetail.Query()

        .GroupBy(db.OrderDetail.ProductId)

        .Having(db.OrderDetail.Qty > 0)

上面的代码将会出错,因为Having方法里的Expression参数用了 OrderDetail.Qty,但是它并未出现在Group By子句中。

Group By时,Having使用Column聚合函数代码如下:

db.OrderDetail.Query()
        .GroupBy(db.OrderDetail.ProductId)
        .Having(db.OrderDetail.Qty.Sum > 0)

MicroOrm.Net支持的聚合函数有:Sum、Min、Max、Avg