演员在哪里? LINQ to Entities仅支持转换实体数据模型基元类型

我有许多entity framework表,我已经使用他们的IHistoricEntity类支持IHistoricEntity接口。 IHistoricEntityActiveTo Datetime? 属性。

 // Auto generated LINQ to Entities domain service: [EnableClientAccess()] public partial class ProductService : LinqToEntitiesDomainService { public IQueryable GetANALYSIS_CODES() { return this.ObjectContext.ANALYSIS_CODES; } ... } // My Partial class to add interface public partial class ANALYSIS_CODES : IHistoricEntity {} 

我试图将这个工作代码重构为一个方法:

 List filtered = (from rec in ps.GetANALYSIS_CODES() where rec.ActiveTo == null select rec).ToList() 

像这样:

 private List Filter(IQueryable queryable) where T : IHistoricEntity { return (from rec in queryable where rec.ActiveTo == null select rec).ToList(); } // called like this: List filtered = Filter(ps.GetANALYSIS_CODES()); 

这在ToList上给出了这个例外:

无法将“ANALYSIS_CODES”类型强制转换为“IHistoricEntity”类型。 LINQ to Entities仅支持转换实体数据模型基元类型。

但是我在哪里要求它投射到IHistoricEntity ? 我已经说过T必须支持IHistoricEntity

rec.ActiveTo指的是界面中定义的属性。 因此,Linq需要在能够访问该属性之前将recIHistoricEntity

不要被.ToList()引发的exception所.ToList() :只有在需要记录时才会评估和执行Linq查询,在这种情况下,当要将集合转换为List<>

更新 :我validation了@ hvd的评论,实际上,添加了一个where T: class子句更改了Linq表达式

 System.Collections.Generic.List`1[MyType] .Where(x => (Convert(x).ActiveTo == Convert(null))) 

 System.Collections.Generic.List`1[MyType] .Where(x => (x.ActiveTo == Convert(null)))