在Linq函数中调用函数

4 .net c# linq entity-framework

我可以使用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;
     }
}
Run Code Online (Sandbox Code Playgroud)

现在有一种方法可以在我的applciation中的任何地方使用上面的函数,如下所示:

    ....
    var empList = db.Employees
                  .Where(e => e.CostCenterID == 123 
                         && GetEmployeeStatus(e.EmpID) == 1);
    ....
Run Code Online (Sandbox Code Playgroud)

我不想写这个creteria来反复查找员工状态,有没有办法在概念上做到这一点或类似的东西?

还有一件事,我知道我编写函数的方式将导致每行的数据库跳转,我希望有办法避免这种情况,只是将查询嵌入到Linq中,因此它将被调用一次.

del*_*xfe 7

您可以使用扩展功能:

public static class DbContextExtensions 
{
    public static IQueryable<Employee> WhereX(this IQueryable<Employee> queryable, int id)
    {
        return queryable.Where(e => e.CostCenterID == 123);
    }
}
Run Code Online (Sandbox Code Playgroud)