ASP.NET MVC: невозможно преобразовать ObjectQuery → Linq.IQueryable

77
6

Я должен делать что-то неправильно или, может быть, я этого не понимаю. Я пытаюсь заполнить "PropAllMenus" (который имеет кучу свойств) с данными, поступающими из моей сущности. Однако при выполнении преобразования через функцию я получаю InvaldCastExeption в моем "WeekMenuRepository". Вот код:


PropAllMenus
Public Class PropAllMenus

Private _MenuID As Integer
Public Property MenuID() As Integer
Get
Return _MenuID
End Get
Set(ByVal value As Integer)
_MenuID = value
End Set
End Property

Private _Name As String
Public Property Name() As String
Get
Return _Name
End Get
Set(ByVal value As String)
_Name = value
End Set
End Property

Private _DaypartID As Integer
Public Property DaypartID() As Integer
Get
Return _DaypartID
End Get
Set(ByVal value As Integer)
_DaypartID = value
End Set
End Property

End Class


WeekMenuRepository
Private _db As New EDMWeekmenuEntities()
Public Function ListAllMenus() As IQueryable(Of PropAllMenus) Implements IWeekMenuRepository.ListAllMenus
Dim result = From p In _db.Menus _
Select p
Return result

End Function


HomeController
Dim DoThings As New WeekMenuRepository()
Function Index() As ActionResult

Return View(DoThings.ListAllMenus().ToList)

End Function

спросил(а) 2021-01-19T09:53:17+03:00 6 месяцев, 1 неделя назад
1
Решение
78

PropAllMenus не является типом сущности, поэтому EF не может неявно преобразовывать в него тип сущности, например Menu.


Другими словами, ваш тип результата функции IQueryable(Of PropAllMenus), но ваш запрос возвращает что-то вроде ObjectQuery(Of Menu). Если вы можете изменить свой запрос, чтобы вернуться ObjectQuery(Of PropAllMenus), тогда будет работать неявный приведение (когда вы вызываете Return) в IQueryable.


Вам нужно сделать что-то вроде:

    Dim result = From p In _db.Menus _
Select New PropAllMenus With
{
.MenuId = p.MenuId,
.Name = p.Name,
// etc.
}

Кстати, я заметил, что вы задали 6 вопросов, но никогда не принимали никаких ответов и не загружали ничего. Вы должны нажать "стрелку вверх" рядом с любыми ответами, которые вы найдете полезными, и нажмите значок "галочка" рядом с одним наиболее полезным ответом на заданный вами вопрос. Это способ сказать "спасибо".

ответил(а) 2021-01-19T09:53:17+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема