Jar*_*yer 73
您没有指定数据库或版本.如果你足够幸运,能够使用该品牌新的SQL Server 2012,并访问MSDN,您可以用崭新的OFFSET
和FETCH
关键字.以下查询将跳过20条记录并返回下一条5条记录.
SELECT * FROM [Posts]
ORDER BY [InsertDate]
OFFSET 20 ROWS
FETCH NEXT 5 ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请查看http://msdn.microsoft.com/en-us/library/ms188385(v=sql.110).aspx#Offset.
此外,复制Massive的方式并为IDbConnection编写自己的扩展方法也很容易.这是Massive的代码.
var query = string.Format("SELECT {0} FROM (SELECT ROW_NUMBER() OVER (ORDER BY {2}) AS Row, {0} FROM {3} {4}) AS Paged ", columns, pageSize, orderBy, TableName, where);
Run Code Online (Sandbox Code Playgroud)
Ale*_*lex 36
1)Dapper没有内置的分页功能.但是在查询中直接实现它并不困难.例:
SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY InsertDate) AS RowNum, *
FROM Posts
WHERE InsertDate >= '1900-01-01'
) AS result
WHERE RowNum >= 1 // *your pagination parameters
AND RowNum < 20 //*
ORDER BY RowNum
Run Code Online (Sandbox Code Playgroud)
需要SQL Server 2005+
2)Dapper返回一个IEnumerable<T>
.
这是使用 C# 和 Dapper 的完整工作版本。
/// <summary>
/// Gets All People
/// </summary>
/// <returns>List of People</returns>
public IEnumerable<Person> GetAllPeople(Pager pager)
{
var sql = (@" select * from [dbo].[Person]
order by [PeplNo]
OFFSET @Offset ROWS
FETCH NEXT @Next ROWS ONLY");
using (IDbConnection cn = Connection)
{
cn.Open();
var results = cn.Query<Person>(sql,pager);
return results;
}
}
public class Pager
{
public int Page { get; set; }
public int PageSize { get; set; }
public int Offset { get; set; }
public int Next { get; set; }
public Pager(int page, int pageSize = 10)
{
Page = page < 1 ? 1 : page;
PageSize = pageSize < 1 ? 10 : pageSize;
Next = pageSize;
Offset = (Page - 1) * Next;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25942 次 |
最近记录: |