none
Consulta linq complexa ao passar parâmetros RRS feed

  • Pergunta

  • Preciso fazer uma consulta linq, mas estou tendo uma dificuldade para fazer. Eu possuo 5 filtros na página. Sendo que três deles vêm de três dropdown(select). Eu só poderei considerar os select, caso o texto neles sejam diferentes de "SEM FILTRO", primeiro passo. O último select, tem apenas duas linhas, sendo a primeira GERAL e a segunda SOUZA CRUZ. Se for geral, deverá trazer tudo que está no campo visao, senão somente aquilo que é souza cruz. Como eu não consigo dar um if dentro de uma linq, fico com essa dificuldade. Tenho essa consulta, que um colega me passou aqui nesse forum, dessa forma, mas encontro dificuldade para colocar mais filtros nesse meu novo contexto. A consulta que o Morrison me passou foi essa e atendeu para o que eu solicitei.

    .Where(cn => (cn.x1.a1.o2.NumOs == Convert.ToInt32(_osparceiro)) && (_cnpj == "" || cn.cnpj == _cnpj))

    Agora estou com dificuldade para fazer a minha. Veja o meu método:

    [HttpPost]
            public JsonResult MontaResultadoPdv(string _cnpj, string _contato, string _filtrarrede, string _filtarstatus, string _visao)
            {
                V99_WEBEntities db = new V99_WEBEntities();
    
                var resultadopdv = (from pdv in db.T_PDV
                                        .Where(res => (res.CNPJ == "" || res.CNPJ == _cnpj))
                                    select new { 
                                                pdv.RazaoSocial,
                                                pdv.}).ToList(); 
    
                return Json(new {  }, JsonRequestBehavior.AllowGet);
            }

    Esses são os parâmetros que vêm dos selects:

    string _filtrarrede, string _filtarstatus, string _visao

    Se vir null ou vazio, por exemplo, a consulta me dará um resultado não esperado.

    quinta-feira, 26 de junho de 2014 12:26

Todas as Respostas

  • Olá pnet,

      quando tiver dúvida sobre linq sugiro postar no Fórum de Linq para ter um retorno mais rapidamente ! 

      Agora quanto a sua dúvida creio que a maneira mais simples é criar uma variável como AsQueryable() de sua entidade e ir concatenando a query por ex :

    var query = db.T_PDV.AsQueryable();
    
      if(_cnpj != string.Empty)
        query = query.Where(i => i.cnpj == _cnpj);
    
      if(_contato != string.Empty)
        query = query.Where(i => i.cnpj == _cnpj); 
    
      //e assim vai
    
      //no fim
    
      var dados = query.ToList();
     Os outros modos de se fazer isso eu acho mais complicado de entender !

    quinta-feira, 26 de junho de 2014 14:21