예제 #1
0
        /// <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);
            }));
        }
예제 #2
0
        /// <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());
        }
예제 #3
0
 /// <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)
     });
 }