【问题标题】:Using Automapper to return IQueryable使用 Automapper 返回 IQueryable
【发布时间】:2012-09-13 01:39:30
【问题描述】:

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

这是错误:

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

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

目标路径: 成本中心

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

这是代码:

将元数据调暗为新的 LinqMetaData Dim q = 从 p 在 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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 2020-12-09
    • 2017-04-02
    • 1970-01-01
    • 2021-12-24
    • 2017-12-06
    相关资源
    最近更新 更多