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 <T> > Search([FromQuery] string lastname, [FromQuery] string genre, [FromQuery] string sort) { var query = _context.Set <T>().AsQueryable(); //solution 2: optimisation de la requete SQL if (!string.IsNullOrWhiteSpace(lastname)) { //var tab1 = lastname.Split(','); if (lastname.StartsWith("*") && lastname.EndsWith("*")) { //&& lastname.EndsWith("*") query = IQueryableExtensions.SelectColonnesName(query, "lastname", lastname); } else { return(NotFound(new { Message = $"Le lastname {lastname} doit etre encadré par des *" })); } if (!string.IsNullOrWhiteSpace(genre)) { var tab3 = genre.Split(','); // //on verifie si on a deux éléments dans le tableau pour savoir si on va faire le expression.or() if (tab3.Length == 1) { query = IQueryableExtensions.SelectColonnesGenderOne(query, "genre", tab3[0]); } else { query = IQueryableExtensions.SelectColonnesGender(query, "genre", tab3); } } if (!string.IsNullOrWhiteSpace(sort)) { var tab2 = sort.Split(','); query = IQueryableExtensions.SelectColonnesAsc(query, tab2); } return(Ok(ToJsonList(await query.ToListAsync()))); } else { return(NotFound(new { Message = $"name {lastname} not found" })); } }