MicroOrm.Net(7) Table.Query() - Group By & Having
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2006-04-12 .NET组件编程(10) 补充 ISupportInitialize