Пример #1
0
        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())));
            }
        }
Пример #2
0
        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" }));
            }
        }