我有一些實體框架表,我已經使用它們的部分類支持接口IHistoricEntity
。 IHistoricEntity
有ActiveTo
Datetime?
財產。這裏演員在哪裏? LINQ to Entities只支持鑄造實體數據模型基本類型
// Auto generated LINQ to Entities domain service:
[EnableClientAccess()]
public partial class ProductService : LinqToEntitiesDomainService<ProductDBEntities>
{
public IQueryable<ANALYSIS_CODES> GetANALYSIS_CODES()
{
return this.ObjectContext.ANALYSIS_CODES;
}
...
}
// My Partial class to add interface
public partial class ANALYSIS_CODES : IHistoricEntity
{}
我試圖重構該工作代碼的方法:
List<ANALYSIS_CODE> filtered = (from rec in ps.GetANALYSIS_CODES() where rec.ActiveTo == null select rec).ToList()
像這樣:
private List<T> Filter<T>(IQueryable<T> queryable) where T : IHistoricEntity
{
return (from rec in queryable where rec.ActiveTo == null select rec).ToList();
}
// called like this:
List<ANALYSIS_CODE> filtered = Filter(ps.GetANALYSIS_CODES());
這使得在ToList
此異常:
無法將類型'ANALYSIS_CODES'轉換爲鍵入'IHistoricEntity'。 LINQ to Entities僅支持投射實體數據模型基元類型。
但我在哪裏要求它投射到IHistoricEntity
?我已經明確表示T
必須支持IHistoricEntity
。
您是否嘗試過存放在變量的查詢和在ToListing之前在調試器中檢查它的表達屬性?這應該顯示你演員的位置。 – wizzardmr42
這裏沒有什麼用處,當我嘗試擴展結果時,我得到了異常。 – weston
您是否嘗試明確訪問.expression屬性?它在調試器中並不總是可見的,但您應該能夠手動輸入它。另外,在調試器中嘗試query.ToString(),因爲這可能會給出一個線索(適用於Linq to SQL,不要認爲我已經使用實體嘗試過) – wizzardmr42