Ok, eu tenho entidades de três níveis com a seguinte hierarquia: Curso -> Módulo -> Capítulo
Aqui estava a declaração EF LINQ original:
Course course = db.Courses
.Include(i => i.Modules.Select(s => s.Chapters))
.Single(x => x.Id == id);
Agora, quero incluir outra entidade chamada Lab, associada a um curso.
Como faço para incluir a entidade do laboratório?
Eu tentei o seguinte, mas não funcionou:
Course course = db.Courses
.Include(i => i.Modules.Select(s => s.Chapters) && i.Lab)
.Single(x => x.Id == id);
Alguma idéia de como incluir a 2ª entidade?
Qualquer conselho ou informação seria muito apreciada. Obrigado!
.net
asp.net-mvc-3
linq
entity-framework
entity-framework-5
AnimaSola
fonte
fonte
.Include
deve funcionar, a menos que você queira dizer que a inclusão adicional é um neto do curso. Veja isto ou uma opção melhor é estaRespostas:
Você já tentou adicionar outro
Include
:Sua solução falha porque
Include
não leva um operador booleanoAtualização Para saber mais, faça o download do LinqPad e veja as amostras. Eu acho que é a maneira mais rápida de se familiarizar com Linq e Lambda.
Para começar - a diferença entre
Select
eInclude
é que, com um Select, você decide o que deseja retornar (também conhecido como projeção). A função Incluir é uma carga ansiosa , que informa ao Entity Framework que você deseja que ele inclua dados de outras tabelas.A sintaxe Incluir também pode estar na sequência. Como isso:
Mas as amostras no LinqPad explicam isso melhor.
fonte
.Include("Module.Chapter")
. Alguma idéia de por que isso seria?System.Data.Enity
para nome para acessar o método de extensão. mais informações aquiusing System.Data.Entity;
fez isso. Obrigado!No Entity Framework Core (
EF.core
), você pode usar.ThenInclude
para incluir os próximos níveis.Mais informações: https://docs.microsoft.com/en-us/ef/core/querying/related-data
Nota: Diga que você precisa múltipla
ThenInclude()
onblog.Posts
, basta repetir oInclude(blog => blog.Posts)
e fazem outraThenInclude(post => post.Other)
.fonte
ThenInclude
no núcleo da EF. Talvez faça uma pergunta com um bom exemplo, para que possamos respondê-la.Include
faz parte da interface fluente, para que você possa escrever váriasInclude
instruções uma após a outrafonte
Você também pode tentar
fonte
Pode-se escrever um método de extensão como este:
E use-o assim mesmo em uma implementação genérica:
fonte
Include