【问题标题】:Query List of nested Viewmodels查询嵌套视图模型列表
【发布时间】:2013-02-11 13:43:42
【问题描述】:

我有以下嵌套视图模型:

Public Class ContentViewModel
    Public Property CONTENTID As Integer
    Public Property IMAGETOCONTENT() As IEnumerable(Of ImageToContentViewModel)
End Class

Public Class ImageToContentViewModel
    Public Property IMAGETOCONTENTID As Integer
    Public Property IMAGE As ImageViewModel
End Class

Public Class ImageViewModel
    Public Property IMAGEID As Integer
    Public Property TITLE As String
End Class

我正在尝试查询嵌套视图模型:

Function Test() As ContentViewModel
    Dim dataObject = (From a In db.CMS_CONTENT.OfType(Of CMS_EVENT)()
                 Where a.CONTENTID = contentId AndAlso a.DELETED = 0
                 Select New ContentViewModel With {
                     .CONTENTID = a.CONTENTID,                        
                     .IMAGETOCONTENT = (From b In db.CMS_IMAGES_TO_CONTENT
                      Where b.CONTENTID = a.CONTENTID
                      Select New ImageToContentViewModel With {
                          .IMAGETOCONTENTID = b.IMAGETOCONTENTID,
                          .IMAGE = (From c In db.CMS_IMAGES
                                    Where c.IMAGEID = b.IMAGEID And c.DELETED = False
                                    Select New ImageViewModel With {
                                        .IMAGEID = c.IMAGEID,
                                        .TITLE = c.TITLE
                                    })
                      })
                 })

    Return dataObject 
End Function

我的问题是我无法返回填充的视图模型,因为我总是收到错误:

“System.Data.Objects.ObjectQuery`1[MvcApp.ContentViewModel]”类型的对象无法转换为“MvcApp.ContentViewModel”

【问题讨论】:

    标签: vb.net linq asp.net-mvc-4 viewmodel


    【解决方案1】:

    您的函数体创建 ContentViewModelIQueryable(实现为 System.Data.Objects.ObjectQuery`1[MvcApp.ContentViewModel]),因为这是 Select 返回的内容。

    您应该使用FirstOrDefault(),或者将返回类型更改为IQueryableContentViewModel)。

    【讨论】:

    • 如果我使用Return dataObject.FirstOrDefault() 我得到类型“System.Linq.IQueryable1”无法转换为类型“MvcApp.ImageViewModel”。 'LINQ to Entities' 仅支持原始实体数据模型类型的转换,如果我使用IQueryable (of ContentViewModel) 作为返回类型,查询将执行,但我如何将结果转换为单个视图模型Dim viewModel = New EventViewModel
    • 您必须在每个 Select 之后使用 FirstOrDefault,嵌套的也是如此。但是您必须知道 linq 查询可能会返回包含多个项目的列表。你真的总是只需要第一个吗?
    • 其实父视图模型ContentViewModel(single)有一个ImageToContentViewModel(ienumerable)的嵌套List,每个ImageToContentViewModel都有一个嵌套的ImageViewModel(single)。
    • 好的,所以ContentViewModel.IMAGETOCONTENT 上没有 FirstOrDefault。
    • 只要我将 FirstOrDefault 放在外部查询 (EventViewModel) 上,我就会得到原始类型异常。
    猜你喜欢
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多