У меня есть метод расширения для общего интерфейса, используемого на моих объектах
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
поддерживает приведение типов примитивов Entity Data Model
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 является ссылочным типом?