10

我试图在我的一个函数中返回一个 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
4

2 回答 2

3

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

于 2012-09-13T01:45:24.217 回答
3

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

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

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

于 2021-02-28T02:09:06.830 回答