public virtual async Task <ActionResult <IEnumerable <dynamic> > > GetAllAsync([FromQuery] string fields, [FromQuery] string asc, [FromQuery] string desc, [FromQuery] string type, [FromQuery] string rating, [FromQuery] string date, [FromQuery] string range) { var query = _context.Set <TModel>().AsQueryable(); if (!string.IsNullOrWhiteSpace(asc) || !string.IsNullOrWhiteSpace(desc)) { query = query.OrderByAscOrDesc(asc, desc); } if (!string.IsNullOrWhiteSpace(type) || !string.IsNullOrWhiteSpace(rating) || !string.IsNullOrWhiteSpace(date)) { string[] fieldNames = { "Type", "Rating", "Date" }; query = query.FilterCustomized(fieldNames, type, rating, date); } if (!string.IsNullOrWhiteSpace(range)) { var tab = range.Split('-'); var start = int.Parse(tab[0]); var end = int.Parse(tab[1]); //query = query.RangePagination(tab[0], tab[1]); query = query.Where(x => x.ID >= start && x.ID <= end); } if (!string.IsNullOrWhiteSpace(fields)) { var tab = fields.Split(','); // var results = await IQueryableExtensions.SelectDynamic<TModel>(query, tab).ToListAsync(); var results = await query.SelectDynamic(tab).ToListAsync(); return(results.Select((x) => IQueryableExtensions.SelectObject(x, tab)).ToList()); } else { return(Ok(ToJsonList(await query.ToListAsync()))); } }
public virtual async Task <ActionResult <IEnumerable <dynamic> > > Sort([FromQuery] string fields, [FromQuery] string asc, [FromQuery] string desc) { var query = _context.Set <T>().AsQueryable(); if (!string.IsNullOrWhiteSpace(asc)) { var tab2 = asc.Split(','); //on verifie si on a deux éléments dans le tableau pour savoir si on va faire le thenBy() if (tab2.Length == 1) { query = IQueryableExtensions.SelectColonnesAscOne(query, tab2[0]); } else { query = IQueryableExtensions.SelectColonnesAsc(query, tab2); } } if (!string.IsNullOrWhiteSpace(desc)) { var tab3 = desc.Split(','); //on verifie si on a deux éléments dans le tableau pour savoir si on va faire le thenBy() if (tab3.Length == 1) { query = IQueryableExtensions.SelectColonnesDescOne(query, tab3[0]); } else { query = IQueryableExtensions.SelectColonnesDesc(query, tab3); } } if (!string.IsNullOrWhiteSpace(fields)) { var tab1 = fields.Split(','); // var results = await IQueryableExtensions.SelectDynamic<TModel>(query, tab).ToListAsync(); var results = await query.SelectModel(tab1).ToListAsync(); return(results.Select((x) => IQueryableExtensions.SelectObject(x, tab1)).ToList()); // toujours penser a faire le select a la fin return(await query.ToListAsync()); } else { return(Ok(ToJsonList(await query.ToListAsync()))); } }
public virtual async Task <ActionResult <IEnumerable <dynamic> > > GetAllAsync([FromQuery] string fields) { var query = _context.Set <TModel>().AsQueryable(); if (!string.IsNullOrWhiteSpace(fields)) { var tab = fields.Split(','); // var results = await IQueryableExtensions.SelectDynamic<TModel>(query, tab).ToListAsync(); var results = await query.SelectDynamic(tab).ToListAsync(); return(results.Select((x) => IQueryableExtensions.SelectObject(x, tab)).ToList()); } else { return(Ok(ToJsonList(await query.ToListAsync()))); } }
public virtual async Task <ActionResult <IEnumerable <dynamic> > > SearchAsync([FromQuery] string fields, [FromQuery] string range, [FromQuery] string asc, [FromQuery] string desc) { IQueryCollection requestQuery = Request.Query; var query = _context.Set <TModel>().AsQueryable(); // TRIS if (!string.IsNullOrWhiteSpace(asc) || !string.IsNullOrWhiteSpace(desc)) { query = query.OrderByDynamic(asc, desc); } // FILTRES if (requestQuery != null && requestQuery.Count() > 0) { query = query.WhereDynamic(requestQuery, true); } // PAGINATION if (!string.IsNullOrWhiteSpace(range)) { var tab = range.Split('-'); query = query.TakePageResult(Int32.Parse(tab[0]), Int32.Parse(tab[1])); } // RENDU PARTIEL if (!string.IsNullOrWhiteSpace(fields)) { var tab = fields.Split(','); query = query.SelectModel(tab); var results = await query.ToListAsync(); return(Ok(results.Select((x) => IQueryableExtensions.SelectObject(x, tab)).ToList())); } else { return(Ok(ToJsonList(await query.ToListAsync()))); } }
public virtual async Task <ActionResult <TModel> > GetById([FromRoute] int id, [FromQuery] string fields) { var query = _context.Set <TModel>().AsQueryable(); //solution 2: optimisation de la requete SQL if (!string.IsNullOrWhiteSpace(fields)) { var tab = new List <string>(fields.Split(',')); if (!tab.Contains("id")) { tab.Add("id"); } var result = query.SelectModel(tab.ToArray()).SingleOrDefault(x => x.ID == id); if (result != null) { var tabFields = fields.Split(','); return(Ok(IQueryableExtensions.SelectObject(result, tabFields))); } else { return(NotFound(new { Message = $"ID {id} not found" })); } } else { var result = query.SingleOrDefault(x => x.ID == id); if (result != null) { return(Ok(ToJson(result))); } else { return(NotFound(new { Message = $"ID {id} not found" })); } } }
public virtual async Task <ActionResult <IEnumerable <dynamic> > > GetAllAsync([FromQuery] string fields, [FromQuery] string range, [FromQuery] string asc, [FromQuery] string desc) { IQueryCollection requestQuery = Request.Query; var query = _context.Set <TModel>().AsQueryable(); // TRIS if (!string.IsNullOrWhiteSpace(asc) || !string.IsNullOrWhiteSpace(desc)) { query = query.OrderByDynamic(asc, desc); } // FILTRES if (requestQuery != null && requestQuery.Count() > 0) { query = query.WhereDynamic(requestQuery); } // PAGINATION if (!string.IsNullOrWhiteSpace(range)) { var tab = range.Split('-'); int total = query.Count(); query = query.TakePageResult(Int32.Parse(tab[0]), Int32.Parse(tab[1])); var linkBuilder = new PageLinkBuilder(Url, "", null, Int32.Parse(tab[0]), Int32.Parse(tab[1]), total); List <string> links = new List <string>(); if (linkBuilder.FirstPage != null) { links.Add(string.Format(LinkHeaderTemplate, linkBuilder.FirstPage, "first")); } if (linkBuilder.PreviousPage != null) { links.Add(string.Format(LinkHeaderTemplate, linkBuilder.PreviousPage, "prev")); } if (linkBuilder.NextPage != null) { links.Add(string.Format(LinkHeaderTemplate, linkBuilder.NextPage, "next")); } if (linkBuilder.LastPage != null) { links.Add(string.Format(LinkHeaderTemplate, linkBuilder.LastPage, "last")); } Response.Headers.Add("Link", string.Join(", ", links)); Response.Headers.Add("Content-Range", linkBuilder.GetContentRange()); Response.Headers.Add("Accept-Ranges", typeof(TModel).Name + " " + total); } // RENDU PARTIEL if (!string.IsNullOrWhiteSpace(fields)) { var tab = fields.Split(','); query = query.SelectModel(tab); var results = await query.ToListAsync(); return(Ok(results.Select((x) => IQueryableExtensions.SelectObject(x, tab)).ToList())); } else { return(Ok(ToJsonList(await query.ToListAsync()))); } }