次の拡張メソッドがあります。
public static IQueryable<Employee> WhereStatus(this IQueryable<Employee> queryable, string status)
{
var result = queryable
.Where(e => e.EmployeeStatus.Where(s => s.StatusEndDate == null).Select(s => s.Status)
.FirstOrDefault() == status);
return result;
}
public static IQueryable<Employee> WhereCostCenter(this IQueryable<Employee> queryable, int costCenterID)
{
var result = queryable
.Where(e => e.CostCenterID == costCenterID);
return result;
}
いくつかのパラメーター (たとえば、ステータス、コスト センター、性別など) に応じて特定の従業員にクエリをフィルター処理するには、ほぼすべての LINQ クエリでこれらの拡張メソッドが必要です。現在、私は次のように使用しています。
using (DB db = new DB())
{
var emps = from em in db.Employees
.WhereStatus("Active")
.WhereCostCenter(112)
select em.EmpID;
var courses = from cr in db.Courses
where c.Contains(cr.EmpID)
select cr;
// now I have the filtered list of the courses I want
.....
}
質問:それはベスト プラクティスですか? または、すべてのエンティティに EmpID があるため、拡張メソッドをすべてのエンティティ タイプで機能させる方法はありますか? 何かのようなもの:
var courses = from em in db.Courses
.WhereStatus("Active") // use the extension methods directly here as well
.WhereCostCenter(112)
select cr;