EF,抽象和泛型扩展编译器在这里做什么?

时间:2012-02-21 08:30:28

标签: c# entity-framework generics

我有一个在我的实体上使用的通用接口的扩展方法

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是引用类型?

1 个答案:

答案 0 :(得分:3)

struct类型为not supported by EF。如果不将参数约束为类,则它也可以是结构。