ASP.NET MVC: невозможно преобразовать ObjectQuery -> Linq.IQueryable - PullRequest
0 голосов
/ 22 октября 2009

Я, должно быть, делаю что-то не так или, может быть, я этого не понимаю. Я пытаюсь заполнить «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

1 Ответ

2 голосов
/ 22 октября 2009

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 вопросов, но никогда не принимали никаких ответов и ничего не загружали. Вы должны нажать «стрелку вверх» рядом с любыми ответами, которые вы считаете полезными, и нажать значок «галочка» рядом с единственным наиболее полезным ответом на вопрос, который вы задали. Это способ сказать «спасибо».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...