使用 Automapper 返回 IQueryable
我試圖在我的一個函式中返回一個 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
為了讓 Automapper 實際執行映射,它必須查看 IQueryable 中的每個元素。一旦你迭代了一個可查詢的,它就不再是可查詢的,因為它已經被查詢過了。
對於任何可能錯過評論連結的人,您可以使用 Automapper 的
[QueryableExtensions][1],特別是ProjectTo. 例如:var collection = _db.Patients .ProjectTo<PatientDto>(_mapper.ConfigurationProvider);這將從 db 實體創建一個 IQueryable 投影。