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);
    ....

従業員のステータスを見つけるための基準を何度も書きたくないのですが、それを行う方法または概念が似ているものはありますか?

もう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 に答える