Вы пытались просто добавить еще один Include
:
Course course = db.Courses
.Include(i => i.Modules.Select(s => s.Chapters))
.Include(i => i.Lab)
.Single(x => x.Id == id);
Ваше решение не работает, потому что Include
не принимает логический оператор
Include(i => i.Modules.Select(s => s.Chapters) && i.Lab)
^^^ ^ ^
list bool operator other list
Update Чтобы узнать подробнее, загрузите LinqPad и просмотрите образцы. Я думаю, что это самый быстрый способ познакомиться с Linq и Lambda.
В начале - разница между Select
и Include
заключается в том, что с помощью Select вы решили , что вы хотите вернуться (aka projection). Include - это функция Eager Loading , которая сообщает Entity Framework, что вы хотите включить данные из других таблиц.
Синтаксис Include также может быть в строке. Например:
db.Courses
.Include("Module.Chapter")
.Include("Lab")
.Single(x => x.Id == id);
Но примеры в LinqPad объясняют это лучше.
out
параметры в SQL Server забавны. Вы должны повторить себя везде .
В частности, здесь вы забыли упомянуть об этом в списке параметров при вызове хранимого процесса. dbo.InsertPhones @model, @out
должно быть dbo.InsertPhones @model, @out out
. Также может быть способ пропустить список параметров из этой строки и указать SQL Server, что вы даете ему имя хранимой процедуры, а не произвольный текст запроса, но я не уверен, как вы будете делать это конкретно здесь (с SqlCommand
объект, это будет через свойство CommandType
).
Если вы используете параметр out
, select
в конце хранимой процедуры не требуется, но я предполагаю, что это была попытка исправить.