/// <summary> /// Executes the count query. /// </summary> /// <typeparam name="T">The type</typeparam> /// <param name="db">The database.</param> /// <param name="filter">The filter.</param> /// <returns>The count query result</returns> private static async Task <int> ExecuteCountQuery <T>([NotNull] IDbConnection db, [NotNull] FastCrudPagedQueryFilter filter) { Contract.Requires(db != null); Contract.Requires(filter != null); return(await db.CountAsync <T>( s => { if (filter.WhereClause != null) { s.Where(filter.WhereClause); } s.WithParameters(filter.Parameters); })); }
/// <summary> /// Executes the fast crud paged query. /// </summary> /// <typeparam name="T">The query result type.</typeparam> /// <param name="db">The database.</param> /// <param name="filter">The filter.</param> /// <returns>An awaitable list of query results.</returns> private static async Task <List <T> > ExecuteFastCrudPagedQuery <T>([NotNull] IDbConnection db, [NotNull] FastCrudPagedQueryFilter filter) { Contract.Requires(db != null); Contract.Requires(filter != null); var records = await db.FindAsync <T>( s => { if (filter.WhereClause != null) { s.Where(filter.WhereClause); } s.OrderBy(filter.OrderByClause).Skip(filter.GetSkip()).Top(filter.GetTake()).WithParameters(filter.Parameters); }); return(records.ToList()); }
/// <summary> /// Executes a Dapper.FastCrud style paged query /// <para> /// Visit https://github.com/MoonStorm/Dapper.FastCRUD/wiki/SQL-statements-and-clauses for more information. /// </para> /// </summary> /// <typeparam name="T">The result type</typeparam> /// <param name="db">The database connection</param> /// <param name="filter">The filter specifying the criteria for the query.</param> /// <returns>A <see cref="PagedResult{T}" /> with the paging result information and dataset.</returns> public static async Task <PagedResult <T> > PagedQueryAsync <T>(this DbConnection db, FastCrudPagedQueryFilter filter) { return(new PagedResult <T>(new PagingInfo(filter.CurrentPage, filter.PageSize)) { TotalRecords = await ExecuteCountQuery <T>(db, filter), Results = await ExecuteFastCrudPagedQuery <T>(db, filter) }); }