我有一个在我的实体上使用的通用接口的扩展方法
public static IQueryable<T> IsEdited<T>(this IQueryable<T> source)
where T : IAuditData
{
return from o in source
where o.CreatedOn != o.UpdatedOn
select o;
}
我称之为
var editedUsers = dataContext.Users.IsEdited();
我得到了
无法将类型'IUserData'强制转换为类型 'IAuditData'。 LINQ to Entities only 支持转换实体数据模型基元类型
IUserData也是一个接口,我用它来抽象DbContext的DbSet属性
IQueryable<IUserData> Users { get { ... } }
但是如果我添加一个类约束,那么一切都很好
public static IQueryable<T> IsEdited<T>(this IQueryable<T> source)
where T : class, IAuditData
{
return from o in source
where o.CreatedOn != o.UpdatedOn
select o;
}
让我开心。 但编译器正在做什么告诉EF T是引用类型?