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

推荐订阅源

TaoSecurity Blog
TaoSecurity Blog
L
LINUX DO - 最新话题
Help Net Security
Help Net Security
N
News | PayPal Newsroom
www.infosecurity-magazine.com
www.infosecurity-magazine.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
The Last Watchdog
The Last Watchdog
S
Security @ Cisco Blogs
W
WeLiveSecurity
C
CXSECURITY Database RSS Feed - CXSecurity.com
Webroot Blog
Webroot Blog
T
Troy Hunt's Blog
V
Vulnerabilities – Threatpost
Google Online Security Blog
Google Online Security Blog
N
News and Events Feed by Topic
T
Threat Research - Cisco Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tor Project blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Darknet – Hacking Tools, Hacker News & Cyber Security
PCI Perspectives
PCI Perspectives
Google DeepMind News
Google DeepMind News
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
S
SegmentFault 最新的问题
J
Java Code Geeks
P
Privacy & Cybersecurity Law Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - 【当耐特】
博客园_首页
H
Hacker News: Front Page
T
Threatpost
Jina AI
Jina AI
博客园 - Franky
月光博客
月光博客
L
LINUX DO - 热门话题
The Cloudflare Blog
H
Heimdal Security Blog
博客园 - 司徒正美
酷 壳 – CoolShell
酷 壳 – CoolShell
Cloudbric
Cloudbric
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
S
Secure Thoughts
T
Tenable Blog
I
Intezer
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - mapserver

MicroOrm.Net和现有ORM产品的对比 MicroOrm.Net(7) Table.Query() - Group By & Having 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(8) Table.Query() - Distinct、Skip & Take
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查询的绝大部分内容,本文将来讲解查询中经常使用的最后几个功能。

Skip&Take:主要使用在查询分页上,api如下:

Query Skip(int skip)
Query Take(int take)

两个方法都只有一个int类型的参数,使用方法如下:

db.OrderDetail.Query()
        .Skip(10)
        .Take(10)

上面代码表示取第11笔到第20笔的资料,在MicroOrm.Net的sql server部分,使用了ROW_NUMBER()、OVER()两个内置函数

Distinct:过滤掉重复的数据,api如下:

它没有任何参数参入,使用代码如下:

db.OrderDetail.Query()
        .Select(db.OrderDetal.ProductId)
        .Distinct()

Distinct、Skip & Take都很简单,但是需要注意的是,这三个方法都只能在一个MicroOrm.Net的Query对象上只能执行一次,下面的代码将会报错。

db.OrderDetail.Query()

        .Skip(10).Skip(1)

        .Take(10).Take(1)

        .Distinct().Distinct()

MicroOrm.Net的查询部分到此就结束了,我们以一个稍微复杂点的代码来结束本篇文章:

var od = db.OrderDetail.Query()
        .Where(db.OrderDetail.OrderId == "001")
        .Where(db.OrderDetail.Qty > "0")
        .Where(db.Order.CustomerId == "001")
        .GroupBy(db.OrderDetail.OrderId)
        .Join(db.Order, db.Order.OrderId == db.OrderDetail.OrderId)
        .Skip(0)
        .Take(1)
        .OrderBy(db.OrderDetail.OrderId)
        .Having(db.OrderDetail.Qty.Sum() > 0)
        .Select(db.OrderDetail.OrderId, db.OrderDetail.Qty.Sum())
        .First();

在SQL Server产生的SQL语句如下:

exec sp_executesql N'SELECT * FROM (SELECT [_#0_].[OrderId] [OrderId],SUM([_#0_].[Qty]) [Qty] ,ROW_NUMBER() OVER( ORDER BY [_#0_].[OrderId] ASC) [_ROW_NUMBER_] FROM [dbo].[OrderDetail] [_#0_] INNER JOIN [dbo].[Order] [o] ON o.[OrderId]=_#0_.[OrderId] WHERE [_#0_].[OrderId] = @p0 AND [_#0_].[Qty] > @p1 AND [o].[CustomerId] = @p2 GROUP BY [_#0_].[OrderId] HAVING SUM([_#0_].[Qty]) > @p3 ) _Data WHERE [_ROW_NUMBER_] BETWEEN 0 AND 1 ',N'@p0 nvarchar(3),@p1 int,@p2 nvarchar(3),@p3 int',@p0=N'001',@p1=0,@p2=N'001',@p3=0