gpt4 book ai didi

c# - 如何在 Entity Framework 中的 DbSet 属性上设置过滤器选项?

转载 作者:行者123 更新时间:2023-11-30 23:09:04 24 4
gpt4 key购买 nike

我的上下文类中有一个 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 属性上设置条件。

能否实现?

最佳答案

您可以添加 IQueryable<Employee>属性到您的 DbContext,它返回事件的 where 条件集。

例子;

public IQueryable<Employee> ActiveEmployees 
{
get
{
return EmployeeDbSet.Where(e => e.IsActive);
}
}

这样你就可以将它与其他where条件结合起来;

context.ActiveEmployees.Where(x=> x.name == "john");

执行此操作后,您不能使用直接在 DbSet<T> 中声明的方法.在使用 where 之后要使用 find 方法,您可以自己添加一个新的 find 方法,如下所示;

public static class DbModelExtensions
{
public static Employee Find(this IQueryable<Employee> query, int id)
{
return query.Where(x => x.Id == id).FirstOrDefault();
}
}

这增加了一个扩展方法 Find只有IQueryable<Employee>如果在当前文件中引用了它的命名空间。

然后就可以这样使用了;

context.ActiveEmployees.Find(15);

关于c# - 如何在 Entity Framework 中的 DbSet 属性上设置过滤器选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46074496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com