#asp.net-mvc #vb.net #asp.net-mvc-3 #entity-framework
#asp.net-mvc #vb.net #asp.net-mvc-3 #структура сущности
Вопрос:
Я пытаюсь вернуть один из модели базы данных EF, используя приведенную ниже строку кода..
Dim _classRoom As classrm = db.classrms.Select(Function(b) b.Course_ID = _CurrCourse.course_ref)
Где classrm — это имя объекта, а db объявляется как новый объект. То, что я пытаюсь сделать, это выбрать строку из объекта на основе соответствия Course_ID, который в этой модели является строкой. Чтобы позже я мог использовать переменную _classRoom для получения других элементов из той же строки.. Однако я получаю следующую ошибку:
Unable to cast object of type 'System.Data.Objects.ObjectQuery`1[System.Boolean]' to type 'Trial_Online.classrm'.
У кого-нибудь есть идеи??? Мне приходится выполнять аналогичные задачи с несколькими разными объектами, но если я укажу правильное направление, я смогу управлять оттуда…
Ответ №1:
Используйте Where
вместо Select
для фильтрации результатов и добавьте First()
или Single()
в конец:
Dim _classRoom As classrm = db.classrms.Where(Function(b) b.Course_ID = _CurrCourse.course_ref).First()
Разница между First()
и Single()
заключается в том, что Single()
будет генерироваться исключение, если в результате будет более 1 элемента. Оба выдадут исключение, если результирующая последовательность пуста.
Вы также можете использовать FirstOrDefault()
и SingleOrDefault()
для возврата Nothing
, если результатов нет.
Ответ №2:
Не слишком знаком с синтаксисом запроса в VB.NET , но в C # я почти уверен, что вам нужно добавить First()
или Single()
в конец запроса, чтобы он проецировал результат в экземпляр объекта. В противном случае, я думаю, вы получите результирующий набор (возможно IQueryable
, объект).