使用Automapper返回IQueryable

Baa*_*ali 8 vb.net asp.net-mvc llblgenpro automapper

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

这是错误:

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

映射类型:LLBLGenProQuery 1 -> CostCentre SD.LLBLGen.Pro.LinqSupportClasses.LLBLGenProQuery1 [[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 _ Select 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
Run Code Online (Sandbox Code Playgroud)

Pau*_*ito 7

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

var collection = _db.Patients
     .ProjectTo<PatientDto>(_mapper.ConfigurationProvider);
Run Code Online (Sandbox Code Playgroud)

这将从数据库实体创建一个 IQueryable 投影。


arm*_*oon 4

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

  • 错误:解决方案请参见http://stackoverflow.com/a/12365931/178620。 (11认同)