Хорошо, у меня есть трехуровневые объекты со следующей иерархией: Курс -> Модуль -> Глава
Вот оригинальное заявление EF LINQ:
Course course = db.Courses
.Include(i => i.Modules.Select(s => s.Chapters))
.Single(x => x.Id == id);
Теперь я хочу включить другую сущность под названием Lab, которая связана с курсом.
Как включить объект «Лаборатория»?
Я попробовал следующее, но это не сработало:
Course course = db.Courses
.Include(i => i.Modules.Select(s => s.Chapters) && i.Lab)
.Single(x => x.Id == id);
Любые идеи по включению 2-й сущности?
Любой совет или информацию будут высоко оценены. Спасибо!
.Include
должно работать, если вы не имеете в виду, что дополнительное включение - это, конечно, внук. Посмотрите это или лучший вариант этоОтветы:
Вы пробовали просто добавить еще один
Include
:Ваше решение терпит неудачу, потому
Include
что не принимает логический операторОбновление Чтобы узнать больше, загрузите LinqPad и просмотрите образцы. Я думаю, что это самый быстрый способ познакомиться с Linq и Lambda.
Для начала - разница между
Select
иInclude
заключается в том, что с помощью выбора вы решаете, что вы хотите вернуть (он же проекция). Включение - это функция быстрой загрузки , которая сообщает Entity Framework, что вы хотите, чтобы она включала данные из других таблиц.Синтаксис включения также может быть в строке. Как это:
Но примеры в LinqPad объясняют это лучше.
источник
.Include("Module.Chapter")
. Есть идеи, почему это так?System.Data.Enity
для доступа к методу расширения. больше информации здесьusing System.Data.Entity;
сделал это. Спасибо!В Entity Framework Core (
EF.core
) вы можете использовать.ThenInclude
для включения следующих уровней.Дополнительная информация: https://docs.microsoft.com/en-us/ef/core/querying/related-data.
Примечание: скажем, вам нужно многократное
ThenInclude()
включениеblog.Posts
, просто повторитеInclude(blog => blog.Posts)
и сделайте другоеThenInclude(post => post.Other)
.источник
ThenInclude
в ядре EF. Возможно, составьте вопрос с хорошим примером, чтобы мы могли на него ответить.Include
является частью свободного интерфейса, так что вы можете написать несколькоInclude
операторов друг за другомисточник
Вы также можете попробовать
источник
Можно написать метод расширения следующим образом:
И используйте это так даже в общей реализации:
источник
Include