Asp.net-Mvc

使用 Automapper 返回 IQueryable

  • February 28, 2021

我試圖在我的一個函式中返回一個 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 投影。

引用自:https://stackoverflow.com/questions/12398289