2013-05-16 30 views
0

代碼:如何解決「LINQ to Entities只支持投射EDM原語或枚舉類型。」錯誤?

public MVCCreationOptions GetMVCOptions() 
    { 
     IQueryable<AType> aTypes = _mVDataReadService.GetRecords().AreActive<AType>(); 

     var creationOptions = new MVCCreationOptions 
     { 
      ATypes = aTypes.ToList() 
     }; 

     return creationOptions; 
    } 

我收到錯誤消息「無法轉換類型'XX.YY.ZZ.Models.IAbc爲鍵入‘XX.YY.ZZ.Models.Lookups.Complex.AType’LINQ到實體僅支持鑄造EDM原始或枚舉類型。」在下面的行

var creationOptions = new MVCCreationOptions 
    { 
     ATypes = aTypes.ToList() 
    }; 

回答

0

通過調用.ToList()第一執行查詢:

IQueryable<AType> aTypes = _mVDataReadService.GetRecords() 
    .ToList() 
    .AreActive<AType>(); 
+0

'.AreActive'未在'.ToList()' –

+2

之後作爲intellisense填充什麼是'.AreActive '。這是你寫的一些自定義擴展方法嗎?如果它是一個擴展方法IQueryable的''你可以嘗試添加一個'.AsQueryable()'後'.ToList()'方法:。'_mVDataReadService.GetRecords()ToList()AsQueryable已()AreActive ( )'。 –

+1

這將不包括任何「活動」相關的選擇在生成的SQL的標準WHERE子句,並會導致次優的性能,因爲它會獲取從DB不需要的記錄,並在內存中創建不需要的對象只是爲了以後宰殺他們在查詢。 –

0

實體框架不支持的接口(未尚未,我希望)。就那麼簡單。所以即使被查詢的實體實現它,你也不能在linq查詢中包含一個針對接口的表達式。

你只需要表達添加到查詢

_mVDataReadService.GetRecords().Where(r => r.IsActive) 

您還可以創建類似GetActiveRecords()爲實現接口的每個實體的方法。

相關問題