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()); } }
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; } }