我正在使用 Entity Framework 访问我的域模型,所有这些都实现了一个接口 (IPublishable),该接口指定属性以指示项目是否已发布。
从前端访问项目时,我总是想过滤掉未发布的项目。所以,每次我写一个查询时,我都在做类似的事情(以下 DbSets Objects1 和 Objects2 都实现了IPublishable
context.Objects1.Where( x => x.IsPublished ...).OrderBy( x => x.Id).ToList()
context.Objects2.Where( x => x.IsPublished ...).First()
理想的情况是,如果我可以将 commonWhere()
子句注入到我的 Web 应用程序中的所有查询中,或者是否有一种方法可以编写可以包含在每个查询中的扩展方法。
我尝试为所有 linq 查询创建扩展方法
public static IEnumerable<T> FrontEnd<T>(this DbSet<T> dbSet) where T : class {
return dbSet.Cast<IPublishable>().Where( x => x.IsPublished ...).Cast<T>();
}
并像这样使用...
context.Objects1.FrontEnd().Where( x => ...).OrderBy(...
但是我收到错误“LINQ to Entities 仅支持转换 EDM 基元或枚举类型”
我是 EF 的新手,所以任何信息都会有很大帮助。谢谢