LIKE NO ENTITY FRAMEWORK

 Tópico anterior Próximo tópico Novo tópico

LIKE NO ENTITY FRAMEWORK

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#497131 - 31/05/2021 17:22:43

RXGOMES
VALINHOS
Cadast. em:Dezembro/2003


Última edição em 31/05/2021 17:23:49 por RXGOMES

Boa tarde

Estou tentando fazer um filtro no lista de um objeto com EF e dois campos dever ser com a condição like conforme segue
   List<PipesTreatment> filtredPipe = pipe
        .Where(p => string.IsNullOrEmpty(idPipeProduct) || p.id_pipe_produtos == idPipeProduct)
        .Where(p => string.IsNullOrEmpty(idPipe) || p.id_pipe == idPipe)
        .Where(p => string.IsNullOrEmpty(nameCDC) || p.NOME_CDC.Contains(nameCDC))
        .Where(p => string.IsNullOrEmpty(familyProduct) || p.familia_produto == familyProduct)
        .Where(p => string.IsNullOrEmpty(nameProject) ||p.nome_projeto.Contains(nameProject))
        .Where(p => string.IsNullOrEmpty(pipeRevised) || p.pipe_tratado == pipeRevised)
        .Where(p => string.IsNullOrEmpty(product) || p.produto == product)
        .Where(p => prevClose == null || prevClose.Contains(p.previsao_fechamento))
        .ToList();


O problema é somente quando as variáveis nameCDC e/ou nameProject contém valor dá o seguinte erro: Referência de objeto não definida para uma instância de um objeto. na linha da variável

Já tentei indexOf, RegEX entre outros mas nada funcionou.

Alguma dica?

Desde já agradeço




#497135 - 31/05/2021 18:37:43

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Acho que o erro é o 'prevClose', ele não tem o mesmo tratamento de verificação de null que os outros.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


Resposta escolhida #497136 - 31/05/2021 20:07:55

DS2T
BARRA MANSA
Cadast. em:Novembro/2010


Última edição em 31/05/2021 20:08:48 por DS2T

O primeiro ponto é que pelo que você comentou, tudo leva a crer que esses dados já estão materializados na memória. Então o 'pipe' já deve ser um List ou um IEnumerable. Bom dar uma atenção nisso daí pra não acabar tendo algum problema com memória.
De qualquer forma, você pode apenas verificar se as propriedades estão nulas antes de chamar o Contains.

Algo assim:

List<PipesTreatment> filtredPipe = pipe
        .Where(p => string.IsNullOrEmpty(idPipeProduct) || p.id_pipe_produtos == idPipeProduct)
        .Where(p => string.IsNullOrEmpty(idPipe) || p.id_pipe == idPipe)
        .Where(p => string.IsNullOrEmpty(nameCDC) || p.NOME_CDC?.Contains(nameCDC))
        .Where(p => string.IsNullOrEmpty(familyProduct) || p.familia_produto == familyProduct)
        .Where(p => string.IsNullOrEmpty(nameProject) ||p.nome_projeto?.Contains(nameProject))
        .Where(p => string.IsNullOrEmpty(pipeRevised) || p.pipe_tratado == pipeRevised)
        .Where(p => string.IsNullOrEmpty(product) || p.produto == product)
        .Where(p => prevClose == null || prevClose.Contains(p.previsao_fechamento))
        .ToList();

Ou assim:


List<PipesTreatment> filtredPipe = pipe
        .Where(p => string.IsNullOrEmpty(idPipeProduct) || p.id_pipe_produtos == idPipeProduct)
        .Where(p => string.IsNullOrEmpty(idPipe) || p.id_pipe == idPipe)
        .Where(p => string.IsNullOrEmpty(nameCDC) || (p.NOME_CDC != null && p.NOME_CDC.Contains(nameCDC)))
        .Where(p => string.IsNullOrEmpty(familyProduct) || p.familia_produto == familyProduct)
        .Where(p => string.IsNullOrEmpty(nameProject) || (p.nome_projeto != null && p.nome_projeto.Contains(nameProject)))
        .Where(p => string.IsNullOrEmpty(pipeRevised) || p.pipe_tratado == pipeRevised)
        .Where(p => string.IsNullOrEmpty(product) || p.produto == product)
        .Where(p => prevClose == null || prevClose.Contains(p.previsao_fechamento))
        .ToList();


Isso deve corrigir, mas como eu disse, tudo leva a crer que algo está sendo renderizado na memória, pois o certo seria o Entity Framework pegar a Expression e fazer a tradução do lado do banco de dados.



Não nasci pra programar, mas preciso me alimentar...


#497137 - 31/05/2021 20:28:08

RXGOMES
VALINHOS
Cadast. em:Dezembro/2003


Boa notie

Obrigado a todos pela ajuda

Citação:
  Acho que o erro é o 'prevClose', ele não tem o mesmo tratamento de verificação de null que os outros.
.- 'prevClose é um List<string>

DS2T sua dica deu certo;



 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por RXGOMES em 31/05/2021 20:28:21