我的上下文类中有DbSet
属性,如下所示:
public class ProjectContext: DbContext
{
public ProjectContext(): base("name=DBCS")
{
}
public DbSet<Employee> EmployeeDbSet { get; set; }
}
此属性正在我的项目的许多地方使用。现在我需要在Employee
上设置一个通用条件,例如我只需要活跃的员工。我可以通过简单地过滤我的linq查询来获得活跃的员工:
var employees = context.EmployeeDbSet.where(e => e.IsActive).ToList();
由于我已经在我的项目的许多地方编写过很多查询,现在我必须重写所有这些查询非常困难,耗时且容易出错。
由于这是一个通用条件,我想在所有查询上设置此项,我正在寻找一种方法来设置EmployeeDbSet
属性的条件。
可以完成吗?
感谢您的帮助
答案 0 :(得分:1)
您可以向DbContext添加public IQueryable<Employee> ActiveEmployees
{
get
{
return EmployeeDbSet.Where(e => e.IsActive);
}
}
属性,该属性返回活动where条件设置。
实施例
context.ActiveEmployees.Where(x=> x.name == "john");
通过这种方式,您可以将其与其他条件相结合;
DbSet<T>
执行此操作后,您无法使用直接在public static class DbModelExtensions
{
public static Employee Find(this IQueryable<Employee> query, int id)
{
return query.Where(x => x.Id == id).FirstOrDefault();
}
}
中声明的方法。要在使用where之后使用find方法,您可以自己添加一个新的find方法,如下所示;
Find
如果在当前文件中引用其名称空间,则会将扩展方法IQueryable<Employee>
添加到context.ActiveEmployees.Find(15);
。
然后你可以像这样使用它;
Modify predictions.select("label", "features").show(5);