4

我可以使用 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;
     }
}

现在有没有办法以某种方式在我的应用程序中的任何地方使用上面的函数,如下所示:

    ....
    var empList = db.Employees
                  .Where(e => e.CostCenterID == 123 
                         && GetEmployeeStatus(e.EmpID) == 1);
    ....

我不想写一遍又一遍地查找员工状态的标准,有没有办法做到这一点或概念上类似的东西?

还有一件事,我知道我编写函数的方式会导致每一行的数据库之旅,我希望有办法避免这种情况,只需将查询嵌入到 Linq 中,这样它就会被调用一次。

4

1 回答 1

7

您可以使用扩展功能:

public static class DbContextExtensions 
{
    public static IQueryable<Employee> WhereX(this IQueryable<Employee> queryable, int id)
    {
        return queryable.Where(e => e.CostCenterID == 123);
    }
}
于 2013-02-12T20:28:39.403 回答