public async Task <DataPage <D> > ExecuteQuery <D, Dext>(IWebQueryProvider query) where Dext : D
        {
            if (SourceRepository is IWebQueryable)
            {
                return(await(SourceRepository as IWebQueryable).ExecuteQuery <D, Dext>(query));
            }
            else
            {
                QueryDescription <D> qd = null;
                if (query != null)
                {
                    qd = query.Parse <D>();
                }

                if (qd == null)
                {
                    return(await
                           SourceRepository.GetPage <D>(null, null, 1, int.MaxValue, null));
                }
                else
                {
                    var grouping = qd.GetGrouping <Dext>();
                    if (grouping == null)
                    {
                        return(await
                               SourceRepository.GetPage <D>(qd.GetFilterExpression(), qd.GetSorting(), (int)qd.Page, (int)qd.Take));
                    }
                    else
                    {
                        return(await
                               SourceRepository.GetPageExtended <D, Dext>(qd.GetFilterExpression(), qd.GetSorting <Dext>(), (int)qd.Page, (int)qd.Take, grouping));
                    }
                }
            }
        }
 public FoodController(FoodRepository repository,
                       IStringLocalizerFactory factory,
                       IHttpContextAccessor accessor,
                       IWebQueryProvider queryProvider)
     : base(factory, accessor)
 {
     Repository         = repository;
     this.queryProvider = queryProvider;
 }
 public GridTestController(
     Data.ApplicationDbContext db,
     IStringLocalizerFactory factory,
     IHttpContextAccessor accessor,
     IWebQueryProvider queryProvider) : base(factory, accessor)
 {
     //in actual 3 layers applications repository inherit
     //from DefaultCRUDRepository
     //and then it is DI injected
     Repository         = DefaultCRUDRepository.Create(db, db.Products);
     oDataRepository    = new DefaultWebQueryRepository(Repository);
     TypesRepository    = DefaultCRUDRepository.Create(db, db.ProductTypes);
     this.queryProvider = queryProvider;
 }