none
LINQ - CONSULTAS COM VALOR NULL RRS feed

  • Pergunta

  • Bom dia,

    Pessoal to com um problema aqui, e queria uma ajuda. vamos lá.

    Estou usando LINQ para pequenas consultas, surgiu uma consulta com alguns parâmetros que podem ser nulos. 
    Para vocês entenderem melhor o que eu quero dizer, vou começar pelo o que deveria acontecer.

    Eu normalmente passo os parametros nulos, que estão em uma drop. A consulta então teria que trazer todo mundo. independente se aqueles Ids, são ou não são nulos.

    isso é o que deveria acontecer.

    O que esta acontecendo, quando eu faço a busca com os parametros nulos,
    a consulta tras todas as lindas que existem menos os valores nulos.

    Vê se alguem consegue me ajudar.
    Ai esta a minha consulta

    var a = from bem in ent.AtivoBem join classe in ent.AtivoClasse on bem.IdClasse equals classe.IdClasse join subclasse in ent.AtivoSubClasse on bem.IdSubClasse equals subclasse.IdSubClasse where bem.IdEntidade == idEntidade && idBems.Contains(bem.IdBem) && (idClasse.HasValue ? bem.IdClasse == idClasse.Value : !idClasse.HasValue) && (idSubClasse.HasValue ? bem.IdSubClasse == idSubClasse.Value : !idSubClasse.HasValue) && (string.IsNullOrEmpty(busca) || bem.Codigo.Contains(busca) || bem.Descricao.Contains(busca)) select new { bem.IdBem, bem.Descricao, bem.Codigo, bem.Ativo, bem.Bloqueado, bem.Motivo, ClasseDescricao = classe.Descricao, SubClasseDescricao = subclasse.Descricao }; return ent.ListarPaginado(parametros, a);


    Os valores que podem vir nulos são idClasse e idSubClasse
    • Editado JoojiCorrea quarta-feira, 5 de dezembro de 2012 11:37
    quarta-feira, 5 de dezembro de 2012 11:34

Todas as Respostas

  • (!idSubClasse.HasValue || bem.IdSubClasse == idSubClasse.Value)

    Neste caso ele vai trazer os campos que tiverem valor nulo do IdSubClasses

    e os que tiverem o valor igual ao informado

    (idSubClasse.HasValue && bem.IdSubClasse == idSubClasse.Value)

    Neste caso não vai trazer os campos que tiverem valor nulo e apenas os valores

    informados.

    ve qual é seu caso e faz igual para os dois campos Nullable

    sexta-feira, 7 de dezembro de 2012 18:53
  •                  
                    var a = ent.AtivoBem.Join(ent.AtivoClasse, bem => bem.IdClasse, classe => classe.IdClasse,
                                              (bem, classe) => new {bem, classe}).Join(ent.AtivoSubClasse,
                                                                                       @t => @t.bem.IdSubClasse,
                                                                                       subclasse => subclasse.IdSubClasse,
                                                                                       (@t, subclasse) =>
                                                                                       new {@t, subclasse}).Where(
                                                                                           @t =>
                                                                                           @t.@t.bem.IdEntidade ==
                                                                                           idEntidade
                                                                                           &&
                                                                                           idBems.Contains(@t.@t.bem.IdBem)
                                                                                           &&
                                                                                           (idClasse.HasValue
                                                                                                ? @t.@t.bem.IdClasse ==
                                                                                                  idClasse.Value
                                                                                                : !idClasse.HasValue)
                                                                                           &&
                                                                                           (idSubClasse.HasValue
                                                                                                ? @t.@t.bem.IdSubClasse ==
                                                                                                  idSubClasse.Value
                                                                                                : !idSubClasse.HasValue)
                                                                                           &&
                                                                                           (string.IsNullOrEmpty(busca) ||
                                                                                            @t.@t.bem.Codigo.Contains(busca) ||
                                                                                            @t.@t.bem.Descricao.Contains(
                                                                                                busca))).Select(@t => new
                                                                                                                          {
                                                                                                                              @t
                                                                                                                          .
                                                                                                                          @t
                                                                                                                          .
                                                                                                                          bem
                                                                                                                          .
                                                                                                                          IdBem,
                                                                                                                              @t
                                                                                                                          .
                                                                                                                          @t
                                                                                                                          .
                                                                                                                          bem
                                                                                                                          .
                                                                                                                          Descricao,
                                                                                                                              @t
                                                                                                                          .
                                                                                                                          @t
                                                                                                                          .
                                                                                                                          bem
                                                                                                                          .
                                                                                                                          Codigo,
                                                                                                                              @t
                                                                                                                          .
                                                                                                                          @t
                                                                                                                          .
                                                                                                                          bem
                                                                                                                          .
                                                                                                                          Ativo,
                                                                                                                              @t
                                                                                                                          .
                                                                                                                          @t
                                                                                                                          .
                                                                                                                          bem
                                                                                                                          .
                                                                                                                          Bloqueado,
                                                                                                                              @t
                                                                                                                          .
                                                                                                                          @t
                                                                                                                          .
                                                                                                                          bem
                                                                                                                          .
                                                                                                                          Motivo,
                                                                                                                              ClasseDescricao
                                                                                                                          =
                                                                                                                          @t
                                                                                                                          .
                                                                                                                          @t
                                                                                                                          .
                                                                                                                          classe
                                                                                                                          .
                                                                                                                          Descricao,
                                                                                                                              SubClasseDescricao
                                                                                                                          =
                                                                                                                          @t
                                                                                                                          .
                                                                                                                          subclasse
                                                                                                                          .
                                                                                                                          Descricao
                                                                                                                          });
    

    terça-feira, 11 de dezembro de 2012 00:05