Olá pessoal, hoje eu vou falar e mostar como criar uma busca mais dinâmica e usando o IgnoreCase do próprio LINQ. O que faz o IgnoreCase? A minha explicação é a seguinte:
- Quando eu tenho no database o nome "Mauricio"
- Mas eu busco o nome "mauricio"
- A diferença é o maiúsculo e minúsculo
- Devido a esse problema, o database não retorna os valores desejados.
Problema: busca entre maiúsculo e minúsculo.
Solução: usar o IgnoreCase
Código: C#
Camada: Repository / DAO
Camada de dados: EntityFramework
O código que eu vou mostrar hoje busca por nome ou por e-mail então eu recebo dois parâmetros (string nome, string email).
A primeira linha de código busca os dados e coloca o resultado em uma variável chamada result. Depois os parâmetros são verificados para incluir na condição Where com o ToLower() depois Contains com o parâmetro nome.ToLower(), StringComparison.OrdinalIgnoreCase que ignora se é maiúsculo e minúsculo. Dessa forma, o database retorna os valores que eu preciso.
Depois eu faço o mesmo para o email e no final eu ordeno por nome e retorno a lista esperada e customizada. Veja o código 1.1.
public List<BudgetCadastroModel> Find(string nome, string email)
{
try
{
var result = _db.BudgetCadastroDbSet.ToList();
if (!string.IsNullOrEmpty(nome))
{
result = result
.Where(x => x.NoCadastro.ToLower().Contains(nome.ToLower(),
StringComparison.OrdinalIgnoreCase))
.ToList();
}
if (!string.IsNullOrEmpty(email))
{
result = result
.Where(x => x.EmailCadastro.ToLower().Contains(email.ToLower(),
StringComparison.OrdinalIgnoreCase))
.ToList();
}
result.OrderBy(x => x.NoCadastro);
return result;
}
catch (System.Exception ex)
{
throw ex;
}
}
Código 1.1 - Busca usando o OrinalIgnoreCase
Espero ter ajudado e qualquer dúvida por entrar em contato comigo pelo site mauriciojunior.net.