Beispiel #1
0
        protected virtual ObjectQuery <TEntity> CreateFilterSortQuery(FilterSortParam filterSortParam)
        {
            var query = CreateFilterQuery(filterSortParam.Filters, null);

            query = CreateSortedAndPagedQuery(filterSortParam, query);

            return(query ?? Repository);
        }
Beispiel #2
0
        protected virtual ObjectQuery <TEntity> CreateSortedAndPagedQuery(FilterSortParam filterSortParam, ObjectQuery <TEntity> existingQuery)
        {
            ObjectQuery <TEntity> query = existingQuery;

            if ((filterSortParam.SortParams == null ||
                 filterSortParam.SortParams.Count == 0) &&
                filterSortParam.StartRecord > 0)
            {
                //Skip requires OrderBy statement before
                //sort by Id ASC by default
                if (filterSortParam.SortParams == null)
                {
                    filterSortParam.SortParams = new List <SortParam>();
                }

                filterSortParam.SortParams.Add(new SortParam("Id", true));
            }

            if (filterSortParam.SortParams != null &&
                filterSortParam.SortParams.Count > 0 &&
                filterSortParam.StartRecord >= 0)
            {
                //both sorting & paging defined

                var sortString = filterSortParam.SortParams.Aggregate(string.Empty,
                                                                      (current, sortParam) =>
                                                                      current +
                                                                      ("it." + sortParam.Property +
                                                                       (sortParam.Ascending ? " asc" : " desc")));

                if (filterSortParam.StartRecord > 0)
                {
                    query = existingQuery != null
                        ? existingQuery.Skip(sortString, "@skip_records", new ObjectParameter("skip_records", filterSortParam.StartRecord))
                        : Repository.Skip(sortString, "@skip_records", new ObjectParameter("skip_records", filterSortParam.StartRecord));
                }
                else
                {
                    query = existingQuery != null
                        ? existingQuery.OrderBy(sortString)
                        : Repository.OrderBy(sortString);
                }

                query = CreateLimitQuery(filterSortParam.MaxRecords, query);
            }
            else if (filterSortParam.StartRecord >= 0)
            {
                //paging is defined only
                query = CreatePagedQuery(filterSortParam.StartRecord, filterSortParam.MaxRecords, query);
            }
            else
            {
                //limit is defined only
                query = CreateLimitQuery(filterSortParam.MaxRecords, query);
            }
            return(query);
        }
Beispiel #3
0
        public virtual IList <TEntity> Get(FilterSortParam filterSortParam, out long totalRowCount)
        {
            var filterQuery = CreateFilterQuery(filterSortParam.Filters, null);
            var query       = CreateSortedAndPagedQuery(filterSortParam, filterQuery);

            var entities = query != null?query.ToList() : Repository.ToList();   //for empty filter return all entities

            totalRowCount = filterQuery != null?filterQuery.LongCount() : Repository.LongCount();

            return(entities);
        }
Beispiel #4
0
        public virtual IList <TEntity> Get(FilterSortParam filterSortParam)
        {
            var query = CreateFilterSortQuery(filterSortParam);

            return(query.ToList());
        }