2016-05-26 60 views
0

我想調用映射我的域類到DTO類的方法,但是經過很多嘗試使用LINQ to Entities或LINQ to objects我失敗了,奇怪的不同的錯誤。 Actulal錯誤只是一個「LINQ to Entities不能識別方法System.String ResizeToLogoImage(System.String)'的方法,並且這種方法不能被轉換成存儲表達式。」asp.net web api 2 LINQ to Entities無法識別該方法

映射方法:

public async Task<SingleCategory> SingleCategoryMapping(EventerApiContext context, int id) 
    { 
     var category = await context.Category.Select(c => new SingleCategory 
     { 
      CategoryId = c.CategoryId, 
      CategoryName = c.CategoryName, 
      CityId = c.CityId, 
      Events = context.Event.ToList().Where(e=>e.CategoryId == id).Select(e=> new EventForSingleCategory 
      { 
       EventId = e.EventId, 
       EventName = e.EventName, 
       EventLogo = ImageProcessor.ResizeToLogoImage(e.EventDetail.EventImage.EventImageBase64) 
      }).ToList() 
     }).SingleOrDefaultAsync(c => c.CategoryId == id); 

     return category; 
    } 

方法被調用。

public static string ResizeToLogoImage(string base64String) 
    { 
     if (base64String == null) 
     { 
      return "NULL"; 
     } 
     var imageToResize = Base64ToImage(base64String); 
     var resizedImage = ScaleImage(imageToResize, 50, 50); 
     return ImageToBase64(resizedImage, imageToResize.RawFormat); 
    } 

我知道錯誤出現在EventLogo屬性映射期間,但我不知道該怎麼辦。

+0

那麼,這個表達式不能在SQL查詢中被翻譯,就是這樣。所以,在應用這種方法之前,你必須走出'IQueryable'世界。問題:你沒有Event和Category之間的導航屬性嗎? –

回答

1

嘗試先獲取數據,然後再執行Select語句。我懷疑它試圖在數據庫上執行ResizeToLogoImage :)

相關問題