在Linq函数中调用函数

时间:2013-02-12 20:24:39

标签: c# .net 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;
     }
}

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

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

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

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

1 个答案:

答案 0 :(得分:7)

您可以使用扩展功能:

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