2016-01-08 96 views
0

我有以下代碼,它工作得很好&按預期:LINQ到實體無法識別方法 'System.Object的InjectFrom(System.Object的,System.Object的[])'

return profileEntities.Select(x => (ProfileDTO)new ProfileDTO() 
     { 
      Localizations = new List<ProfileLocalizationDTO>() 
     } 
     .InjectFrom(x)).ToList(); 

然而,我希望把它一步,並從回購填充Localizations與價值觀,像這樣:

return profileEntities.Select(x => (ProfileDTO)new ProfileDTO() 
     { 
      Localizations = _repoProfileLocalization 
           .Query(y => y.ProfileId == x.Id) 
           .Select(y => (ProfileLocalizationDTO)new ProfileLocalizationDTO().InjectFrom(y)) 
           .ToList() 
     } 
     .InjectFrom(x)).ToList(); 

這引發錯誤

的「System.NotSupportedException」類型的異常出現在 EntityFramework.SqlServer.dll但在用戶代碼中沒有處理

其他信息:LINQ實體無法識別方法 「System.Object的InjectFrom(System.Object的,System.Object [])'方法,並且該方法不能被翻譯成商店表達式。

任何意見非常感謝。

回答

1

對於第二個版本,您需要在Select中調用AsEnumerable()告訴clr,方法InjectFrom將在內存中執行。

return profileEntities.Select(x => (ProfileDTO)new ProfileDTO() 
    { 
     Localizations = _repoProfileLocalization 
          .Query(y => y.ProfileId == x.Id) 
          .AsEnumerable() 
          .Select(y => (ProfileLocalizationDTO)new ProfileLocalizationDTO() 
             .InjectFrom(y)) 
          .ToList() 
    } 
    .InjectFrom(x)).ToList(); 

在你的第一個例子,因爲你實例裏面選擇一個通用的列表,你將不得不在內存中的所有結果後的選擇,因爲LINQ的不能執行數據庫上。在第二個示例中,Linq仍然試圖在select中對數據庫執行所有操作,但是然後調用一個不能轉換爲sql的方法,並且出現錯誤。

+1

工作!謝謝! –

相關問題