快速业务通道

数据库组件 Hxj.Data (十五) (查询的排序、分组)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20

本节将讲述查询的排序(order by) 和 分组(group by)。

先说排序

在分页中如果没有指定排序,组件会默认一个排序来实现分页。

例如

DbSession.Default.From<Products>()
         .Page(10, 2)
         .Where(Products._.CategoryID.SelectIn(1, 2, 3))
         .ToList();

生成的sql如下:

Text:
SELECT * FROM
( SELECT TOP 10 * FROM
( SELECT TOP 20 * FROM [Products]
WHERE [Products].[CategoryID]
IN (@c651c8c47b4f4b7587a65b1efeea17a2,@210f5286b2ec4ceabae99f4729d22a74,@5abe298074eb43e98016af330da896e1) ORDER BY  [Products].[ProductID] ASC) AS tempIntable ORDER BY [ProductID] DESC) AS tempOuttable
ORDER BY [ProductID] ASC
Parameters:
@c651c8c47b4f4b7587a65b1efeea17a2[Int32] = 1 @210f5286b2ec4ceabae99f4729d22a74[Int32] = 2  @5abe298074eb43e98016af330da896e1[Int32] = 3 

这里就默认指定了productid作为排序。

当然我们也可自己指定排序,

DbSession.Default.From<Products>()
         .Page(10, 2)
         .Where(Products._.CategoryID.SelectIn(1, 2, 3))
         .OrderBy(Products._.CategoryID.Asc)
         .ToList();

生成的sql如下:

Text:
SELECT * FROM
( SELECT TOP 10 * FROM
( SELECT TOP 20 * FROM [Products]
WHERE [Products].[CategoryID] IN  (@2ba49ec0bf2e47558a06a5ec8a80476a,@1963fb47beb9421896891620c89abddb,@80d632cbcd5843958606bf85371a0428)
ORDER BY [Products].[CategoryID] ASC) AS tempIntable
ORDER BY [CategoryID] DESC) AS tempOuttable
ORDER BY [CategoryID] ASC
Parameters:
@2ba49ec0bf2e47558a06a5ec8a80476a[Int32] = 1 @1963fb47beb9421896891620c89abddb[Int32] = 2  @80d632cbcd5843958606bf85371a0428[Int32] = 3 

分页的时候就按照categoryid来正序排列。

排序在查询中设置的方法就是OrderBy( )

如果多个字段排序则如下操作:

DbSession.Default.From<Products>()
         .OrderBy(Products._.CategoryID.Asc && Products._.ProductID.Asc)
         .ToList();

生成的sql

Text:
SELECT * FROM [Products] ORDER BY [Products].[CategoryID] ASC,[Products].[ProductID] ASC

分组

通过方法GroupBy来设置按照哪些字段分组。

例如:

DbSession.Default.From<Products>()
         .GroupBy(Products._.ProductName.GroupBy)
         .Select(Products._.ProductName)
         .ToDataTable();

生成的sql:

Text:
SELECT [Products].[ProductName] FROM [Products] GROUP BY [Products].[ProductName]

按照多个字段分组和多个排序类似。

DbSession.Default.From<Products>()
         .GroupBy(Products._.ProductName.GroupBy && Products._.ProductID.GroupBy)
         .Select(Products._.ProductName,Products._.ProductID)
         .ToDataTable();

sql:

Text:
SELECT [Products].[ProductName],[Products].[ProductID] FROM [Products] GROUP BY [Products].[ProductName],[Products]. [ProductID]

排序和分组都变得简单了。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号