예제 #1
0
        protected virtual IQueryable <T> CreateSearchQuery(IContext context, IEnumerable <T> filters, List <string> includes, List <OrderBy> orderBys,
                                                           Paging paging)
        {
            IQueryable <T> completeQuery = null;

            foreach (var filter in filters)
            {
                IQueryable <T> queryForFilter = context.Set <T>();

                queryForFilter = _scopeOfResponsibilityService.FilterResultOnCurrentPrincipal(queryForFilter);

                queryForFilter = _filterService.FilterResultsOnSearch(queryForFilter, filter);

                queryForFilter = _filterService.AddIncludes(queryForFilter, includes);

                completeQuery = completeQuery == null ? queryForFilter : completeQuery.Concat(queryForFilter);
            }

            if (completeQuery != null)
            {
                completeQuery = completeQuery.Distinct();

                completeQuery = _filterService.AddOrderBys(completeQuery, orderBys);

                completeQuery = _filterService.AddPaging(completeQuery, paging);
            }

            return(completeQuery);
        }