Пример #1
0
        public async Task <IActionResult> GetAllFiltered([FromQuery] string name = null, [FromQuery] string uf = null)
        {
            try
            {
                EscolaQueryResource query = new EscolaQueryResource()
                {
                    Name = name, UF = uf
                };
                var escolas = await service.Find(query);

                return(Ok(escolas));
            }
            catch (Exception)
            {
                return(NotFound());
            }
        }
Пример #2
0
        public async Task <EscolaResource> SingleOrDefault(EscolaQueryResource query)
        {
            try
            {
                ParameterExpression argParam     = Expression.Parameter(typeof(Escola), "e");
                Expression          nameProperty = Expression.Property(argParam, "Name");
                Expression          ufProperty   = Expression.Property(argParam, "Uf");

                var val1 = Expression.Constant(query.Name);
                var val2 = Expression.Constant(query.UF);

                List <Expression> listExpression = new List <Expression>();

                if (query.Name != null)
                {
                    listExpression.Add(Expression.Equal(nameProperty, val1));
                }
                if (query.UF != null)
                {
                    listExpression.Add(Expression.Equal(ufProperty, val2));
                }


                var andExp = (listExpression.Count > 1) ? Expression.AndAlso(listExpression[0], listExpression[1]) : (listExpression.Count == 1) ? listExpression[0] : null;

                var lambda = (andExp != null) ? Expression.Lambda <Func <Escola, bool> >(andExp, argParam) : null;

                if (lambda == null)
                {
                    throw new Exception("Informe ao menos um parâmetro para a consulta");
                }

                var escola = await unitOfWork.Escolas.SingleOrDefault(lambda);

                var escolaResource = mapper.Map <Escola, EscolaResource>(escola);
                return(escolaResource);
            }
            catch (Exception e)
            {
                throw e;
            }
        }