J'essaie Dapper ORM et j'interroge une table Posts.
Mais j'aimerais avoir des résultats paginés...
1 - Comment puis-je faire cela ? N'y a-t-il pas une aide pour cela?
2 - Dapper Query peut-il retourner un IQueryable ?
Merci, Miguel
J'essaie Dapper ORM et j'interroge une table Posts.
Mais j'aimerais avoir des résultats paginés...
1 - Comment puis-je faire cela ? N'y a-t-il pas une aide pour cela?
2 - Dapper Query peut-il retourner un IQueryable ?
Merci, Miguel
1) Dapper n'a pas de fonction de pagination intégrée. Mais ce n'est pas trop difficile de l'implémenter directement dans la requête. Exemple:
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
Nécessite SQL Server 2005+
2) Dapper renvoie un IEnumerable<T>
.
Voici une version fonctionnelle complète utilisant C# et 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;
}
}
J'ai créé un exemple de projet pour faire une démonstration de la pagination personnalisée Dapper, prendre en charge le tri, les critères et le filtre :
https://github.com/jinweijie/Dapper.PagingSample
En gros, la méthode ressemble à ceci :
Tuple<IEnumerable<Log>, int> Find(LogSearchCriteria criteria
, int pageIndex
, int pageSize
, string[] asc
, string[] desc);
La première valeur de retour est la liste d'articles. La deuxième valeur de retour est le nombre total.
J'espère que ça aide.
Merci.
public async Task<IEnumerable<Blog>> GetBlogs(int pageNo = 1, int pageSize = 10)
{
int skip = (pageNo - 1) * pageSize;
using (var db = _context.GetOpenConnection())
{
var query = string.Format(@"SELECT * FROM [blog] ORDER BY [Id] OFFSET {0} ROWS FETCH NEXT {1} ROWS ONLY", skip, pageSize);
var result = await db.QueryAsync<Blog>(query);
return result;
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.