/// <summary> /// Get all itens filtering direct in DB. Up: More optimized because filters DB. Down: less flexible, don't support dynamic filters. /// </summary> /// <param name="generalBodyGet"></param> /// <param name="error"></param> /// <returns></returns> public List <GetTerritoriesView> GetAllWithDBFilter(GeneralBodyGet generalBodyGet, out RestExceptionError error) { try { if ((generalBodyGet == null) || (generalBodyGet.Filters == null) || (generalBodyGet.Filters.Count == 0)) { error = new RestExceptionError(); error.ExceptionMessage = ""; error.InternalMessage = "Url does not contains filter section"; } error = null; TerritoriesBsn bsn = new TerritoriesBsn(restConfig); List <DataFilterExpressionDB> dbFilter = HelperRESTFilterToDB.FilterRestFilterToDBExpression(generalBodyGet.Filters); List <TerritoriesInfo> dbItems = bsn.GetAll(dbFilter); List <GetTerritoriesView> result = new List <GetTerritoriesView>(); foreach (TerritoriesInfo item in dbItems) { GetTerritoriesView view = new GetTerritoriesView(); Cloner.CopyAllTo(typeof(TerritoriesInfo), item, typeof(GetTerritoriesView), view); result.Add(view); } return(result); } catch (Exception ex) { error = new RestExceptionError(); error.ExceptionMessage = ex.Message; } return(null); }
/// <summary> /// Get a list and apply linq send from request. Request must send one request using "Dynamic" filter type. /// Examples: /// "Where(GetAllTerritoriesView => (GetAllTerritoriesView.TerritoriesID = 4))" /// </summary> /// <param name="list"></param> /// <param name="GeneralBodyGet"></param> /// <param name="error"></param> /// <returns></returns> public List <GetTerritoriesView> DynamicLinqQuery(List <GetTerritoriesView> list, string linqQuery, out RestExceptionError error) { try { error = null; IQueryable <GetTerritoriesView> queryableData = list.AsQueryable <GetTerritoriesView>(); var externals = new Dictionary <string, object>(); externals.Add("list", queryableData); string query = "list." + linqQuery;//Example: "list.Where(GetTerritoriesView => (GetTerritoriesView.TerritoriesID = 4))"; var expression = System.Linq.Dynamic.DynamicExpression.Parse(typeof(IQueryable <GetTerritoriesView>), query, new[] { externals }); var result = queryableData.Provider.CreateQuery <GetTerritoriesView>(expression); return(result.ToList()); } catch (Exception ex) { error = new RestExceptionError(); error.ExceptionMessage = ex.Message; error.InternalMessage = "Error ocurred during 'DynamicLinqQuery' "; } return(null); }
public List <GetTerritoriesView> OrderByAndTrim(List <GetTerritoriesView> list, GeneralBodyGet GeneralBodyGet, out RestExceptionError error) { try { error = null; if ((list == null) || (GeneralBodyGet == null)) { return(list); } IQueryable <GetTerritoriesView> queryableData = list.AsQueryable <GetTerritoriesView>(); List <GetTerritoriesView> filteredList = null; //1)Ordering if (GeneralBodyGet.OrderBy != null) { filteredList = queryableData.OrderBy(GeneralBodyGet.OrderBy).ToList(); } else { filteredList = queryableData.ToList(); } //2)Skipping if (GeneralBodyGet.ItensToSkip > 0) { filteredList = filteredList.Skip(GeneralBodyGet.ItensToSkip).ToList(); } //3)Trimming if (GeneralBodyGet.NumberOfItens > 0) { filteredList = filteredList.Take(GeneralBodyGet.NumberOfItens).ToList(); } return(filteredList); } catch (Exception ex) { error = new RestExceptionError(); error.ExceptionMessage = ex.Message; error.InternalMessage = "Error ocurred during 'OrderByAndTrim' "; } return(null); }
/// <summary> /// Filters a raw list based on GeneralBodyGet.Filters /// </summary> public List <GetTerritoriesView> Filter(List <GetTerritoriesView> rawList, GeneralBodyGet GeneralBodyGet, out RestExceptionError error) { try { error = null; if ((GeneralBodyGet == null) || (GeneralBodyGet.Filters == null) || (GeneralBodyGet.Filters.Count == 0)) { return(rawList); } //Search request data if dynamic filtering is send. DataFilterExpressionREST linqQuery = GeneralBodyGet.Filters.Where(x => x.FilterType == DataFilterExpressionREST._FilterType.Dynamic).FirstOrDefault(); List <GetTerritoriesView> result = null; if (linqQuery != null) { result = DynamicLinqQuery(rawList, linqQuery.Filter, out error); } else { var filteredList = base.FilterRawList(rawList, GeneralBodyGet, out error); result = filteredList.Cast <GetTerritoriesView>().ToList(); } if (error != null) { return(null); } return(result); } catch (Exception ex) { error = new RestExceptionError(); error.ExceptionMessage = ex.Message; error.InternalMessage = "Error ocurred during 'Filter' "; } return(null); }