我可以使用EF在Linq函数中调用函数吗?
例如
int GetEmployeeStatus(string empID)
{
using (DB = new db())
{
var status = db.EmployeeStatus
.Where(e => e.EmpID == empID && e.StatusEndDate == null)
.Select(e => e.Status)
.SingleOrDefault();
return status;
}
}
现在有一种方法可以在我的applciation中的任何地方使用上面的函数,如下所示:
....
var empList = db.Employees
.Where(e => e.CostCenterID == 123
&& GetEmployeeStatus(e.EmpID) == 1);
....
我不想写这个creteria来反复查找员工状态,有没有办法在概念上做到这一点或类似事情?
还有一件事,我知道我编写函数的方式将导致每行的数据库跳转,我希望有办法避免这种情况,只是将查询嵌入到Linq中,因此它将被调用一次。 / p>
答案 0 :(得分:7)
您可以使用扩展功能:
public static class DbContextExtensions
{
public static IQueryable<Employee> WhereX(this IQueryable<Employee> queryable, int id)
{
return queryable.Where(e => e.CostCenterID == 123);
}
}