2013-02-11 38 views
0

我有以下嵌套的ViewModels:查询列表

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 

我想查询嵌套的ViewModels:

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 

我的问题是,我不能返回人口viewmodel,因为我总是得到错误:

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

回答

0

您的功能主体创建了IQueryableContentViewModel(实现为System.Data.Objects.ObjectQuery`1[MvcApp.ContentViewModel]),因为那是Select返回的值。

您要么使用FirstOrDefault(),要么将返回类型更改为IQueryable(的ContentViewModel)。

+0

如果我使用'返回dataObject.FirstOrDefault()'我得到_Type'System.Linq.IQueryable1'无法转换为类型'MvcApp.ImageViewModel'。 'LINQ to Entities'仅支持原始实体数据模型类型_的转换,并且如果我使用'IQueryable(of ContentViewModel)'作为返回类型,查询将执行,但是如何将结果转换为单个视图模型Dim viewModel = New EventViewModel ? – stare 2013-02-11 15:02:47

+0

每次选择后都必须使用FirstOrDefault,也是嵌套的。但是,你必须意识到linq查询可能会返回具有多个项目的列表。你真的只需要第一个吗? – 2013-02-11 15:16:03

+0

实际上,父视图模型ContentViewModel(单个)具有ImageToContentViewModel(ienumerable)的嵌套列表,每个ImageToContentViewModel都有一个嵌套的ImageViewModel(单个)。 – stare 2013-02-11 15:27:07