我试图在我的一个函数中返回一个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
答案 0 :(得分:3)
为了让Automapper实际执行映射,它必须查看IQueryable中的每个元素。一旦迭代了可查询对象,它就不再可查询,因为它已经被查询过了。
答案 1 :(得分:2)
对于可能错过 the comment link 的任何人,您可以使用 Automapper 的 [QueryableExtensions][1]
,特别是 ProjectTo
。例如:
var collection = _db.Patients
.ProjectTo<PatientDto>(_mapper.ConfigurationProvider);
这将从 db 实体创建一个 IQueryable 投影。