c# tutorial 这里的演员在哪里? LINQ to Entities只支持投射实体数据模型原始类型



entity framework是什么 (1)

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

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

更新 :我验证了@ 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)))

我有一些实体框架表,我已经使用他们的IHistoricEntity类支持一个接口IHistoricEntityIHistoricEntityActiveTo Datetime? 属性。

// 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





entity-framework