none
Lambda Expression com condição. RRS feed

  • Pergunta

  • Boa tarde, Pessoal

    Estou com um problema em uma consulta onde preciso fazer condições em uma entity (EntityFrameWorkd6), porém por  ser novo na tecnologia estou com algumas dificuldades.

    Preciso validar se algum campo da minha View está vazia ou não e dependendo do resultado inserir no lambda.

    Exemplo: Antigamente montava uma query mais ou menos assim.

    Para exemplificar vou chamar minha tabela de "Tabela". Essa tabela tem por exemplo 5 campos.

    Por favor não levar muito em consideração o código, pois estou fazendo apenas para entendimento.

    Montaria a query antigamente mais ou menos assim:

    String query = "SELECT * FROM TABELA WHERE";

    if(campo1View != null) {

    query += "CAMPO1 = " +  valor;

    }

    if(campo2View != null) {

    query += "CAMPO2 = " +  valor;

    }

    if(campo3View != null) {

    query += "CAMPO3 = " +  valor;

    }

    Minha query ficaria mais ou menos assim: SELECT * FROM TABELA WHERE CAMPO1 = 'XXXX' AND CAMPO2 ='YYYY' AND CAMPO3= 'ZZZ'

    Meu problema que não estou conseguindo fazer essas condições dinamicamente.

    Vamos pensar que tenho um context e vou retornar uma lista de tabela.

    List<Tabela> lstTabela = _context.Tabela.Where(lambda).ToList();

    Mas antes no lambda preciso fazer as condições dos campos vazios ou não. Se fosse fazer todos os campos daria certo. Exemplo: 

    List<Tabela> lstTabela = _context.Tabela.Where(x => x.Campo1 =="XXXX" && x.Campo2 =="YYYY" && x.Campo3 == "ZZZZ" ).ToList();

    Exemplificado a linha acima posso fazer a pergunta. No comando acima como eu poderia validar se o campo 2 é vazio e não informa-lo na query?

    Obrigado. 

    sexta-feira, 22 de maio de 2015 21:01

Todas as Respostas

  • bool IsNullCampo1View = campo1View == null;
    bool IsNullCampo2View = campo3View == null;
    bool IsNullCampo2View = campo3View == null;

    List<Tabela> lstTabela = _context.Tabela
    .Where(x => (IsNullCampo1View || x.Campo1 =="XXXX") && 
       (IsNullCampo2View || x.Campo2 =="YYYY") && 
           (IsNullCampo3View || x.Campo3 == "ZZZZ") )
    .ToList();
    sexta-feira, 22 de maio de 2015 21:58
  • Amigo tive uma situação semelhante e resolvi dessa maneira.

    List<Tabela> lstTabela = new List<Tabela>();
    
         var query = _context.Tabela.AsQueryable();
         if (!string.IsNullOrWhiteSpace(campo1))
             query = query.Where(x => x.Campo1 == campo1);
         if (!string.IsNullOrWhiteSpace(campo2))
             query = query.Where(x => x.Campo@ == campo2);
    
    lstTabela = query.ToList();
    para ficar melhor eu criei meus filtro em metodos de extensão da minha classe "Tabela" pois faço filtro em varias partes do sistema. Ai fica a seu criterio como fazer.


    Uma imagem vale mais do que mil palavras, mas ocupa 3 mil vezes mais espaço em disco

    sexta-feira, 22 de maio de 2015 23:33