protected virtual ObjectQuery <TEntity> CreateFilterSortQuery(FilterSortParam filterSortParam) { var query = CreateFilterQuery(filterSortParam.Filters, null); query = CreateSortedAndPagedQuery(filterSortParam, query); return(query ?? Repository); }
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); }
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); }
public virtual IList <TEntity> Get(FilterSortParam filterSortParam) { var query = CreateFilterSortQuery(filterSortParam); return(query.ToList()); }