CONSULTA PROPRIEDADE NAVEGAÇÃO ENTITY FRAMEWORK

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

CONSULTA PROPRIEDADE NAVEGAÇÃO ENTITY FRAMEWORK

C#

 Compartilhe  Compartilhe  Compartilhe
#478566 - 20/12/2017 17:21:15

MRSILVA
MARINGA
Cadast. em:Julho/2015


Olá pessoal.

Eu utilizo Entity Framework no meu projeto e não estou conseguindo realizar uma consulta que preciso selecionar por um critério que está no meu objeto de navegação conforme abaixo:

  Db.Fornecedor.Include(c => c.Pessoa.Enderecos.Where(x => x.cep == cep)).ToList();



Gera o seguinte erro somente quando executo a consulta, mesmo com a mensagem bem explicita eu não consigo resolver:  The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties. Nome do parâmetro: path.

Alguém pode me ajudar de como fazer essa consulta.
Desde já agradeço.





#478573 - 20/12/2017 17:40:00

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


Membro da equipe
Dentro de cada endereço existe uma propriedade "cep"?

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#478577 - 20/12/2017 17:58:23

MRSILVA
MARINGA
Cadast. em:Julho/2015


kerplunk.

Sim tem a propriedade cep, inclusive não há erro quando estou escrevendo o código o próprio Visual Studio me mostra a opção "cep"

Desde já agradeço sua ajuda.




#478581 - 20/12/2017 18:56:25

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


Membro da equipe
Vamos ver: Você quer selecionar todos os fornecedores em que o cep do endereço seja "cep", isso?

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#478582 - 20/12/2017 19:43:08

MRSILVA
MARINGA
Cadast. em:Julho/2015


Sim Kerplunk é isso mesmo.



Resposta escolhida #478584 - 20/12/2017 19:52:19

DS2T
BARRA MANSA
Cadast. em:Novembro/2010


Citação:
  Db.Fornecedor.Include(c => c.Pessoa.Enderecos.Where(x => x.cep == cep)).ToList();



Boa noite!
No Include, você coloca apenas o que deseja carregar no objeto (Eager Load). A condição você precisa colocar do lado de fora.

Db.Fornecedor.Where(a => a.Pessoa.Enderecos.Any(b => b.cep == cep)).ToList();

Estou sem o Visual Studio aqui, mas seria algo assim.

Agora, se você quiser carregar o objeto Pessoa e a lista de Enderecos, aí sim, usaria o Include.

Abraços!


"Cansei de frases intelectuais" - Eu mesmo


#478590 - 20/12/2017 21:28:19

MRSILVA
MARINGA
Cadast. em:Julho/2015


Boa noite.

DS2T me ajudou muito nessa resolução e em outras consultas que ainda tenho que construir nesse projeto.

No me caso preciso que retorne os endereços também. Para retornar os endereços precisei colocar o include no final da expressão:

Db.Fornecedor.Where(a => a.Pessoa.Enderecos.Any(b => b.cep == cep)).Include(c => c.Pessoa.Enderecos).ToList();

Faz sentido utilizar primeiramente o "Where" para que  Entity Framework saiba o que precisa ser filtrado.
Ainda não verifiquei como o Entity esta montando a consulta SQL,  acredito que esteja da forma melhor possível.

Muito obrigado DS2T e  também o Kerplunk que iniciou a ajuda.




#478593 - 20/12/2017 21:51:21

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


Membro da equipe
A engine do EF, embora constantemente sendo atualizada e melhorada, é bastante eficiente para montar a query da melhor forma possível, então não se preocupe muito com isso.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#478597 - 21/12/2017 16:29:54

MRSILVA
MARINGA
Cadast. em:Julho/2015


Obrigado Kerplunk.



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


Tópico encerrado, respostas não sao permitidas
Encerrado por MRSILVA em 21/12/2017 16:30:14