使用Automapper返回IQueryable

时间:2012-09-13 01:39:30

标签: asp.net-mvc vb.net automapper llblgenpro

我试图在我的一个函数中返回一个IQueryable对象并使用映射(Automapper)。它设法返回一个IEnumerable对象,但是当我尝试返回一个IQueryable对象时,它会抛出一个错误:

这是错误:

缺少类型映射配置或不支持的映射。

映射类型: LLBLGenProQuery 1 -> CostCentre SD.LLBLGen.Pro.LinqSupportClasses.LLBLGenProQuery 1 [[Mail.DAL.EntityClasses.TblCostCentreEntity,Mail.DAL,Version = 1.0.4638.16064,Culture = neutral,PublicKeyToken = null]] - > Mail.Model.CostCentre

目的地路径: CostCentre

来源价值: SD.LLBLGen.Pro.LinqSupportClasses.LLBLGenProQuery`1 [Mail.DAL.EntityClasses.TblCostCentreEntity]

这是代码:

Dim metaData As New LinqMetaData         Dim q = from p in metaData.TblCostCentre _                     选择p         Mapper.CreateMap(Of TblCostCentreEntity,CostCentre)()

    Dim t As IEnumerable(Of CostCentre) = Mapper.Map(Of CostCentre)(q)
    'Select New CostCentre With {.Active = p.Active, .CostCentre = p.CostCentre, .CreatedBy = p.CreatedBy, .DateCreated = p.DateCreated, .DateLastModified = p.DateLastModified, .ModifiedBy = p.ModifiedBy, .CostCentreID = p.CostCentreId}

    Return t

2 个答案:

答案 0 :(得分:3)

为了让Automapper实际执行映射,它必须查看IQueryable中的每个元素。一旦迭代了可查询对象,它就不再可查询,因为它已经被查询过了。

答案 1 :(得分:2)

对于可能错过 the comment link 的任何人,您可以使用 Automapper 的 [QueryableExtensions][1],特别是 ProjectTo。例如:

var collection = _db.Patients
     .ProjectTo<PatientDto>(_mapper.ConfigurationProvider);

这将从 db 实体创建一个 IQueryable 投影。