如何从IQueryable获得计数

Hom*_*mam 17 c# linq asp.net iqueryable

我在GridView中实现分页.从这篇文章中,我需要两种方法:

public IQueryable BindEmployees(int startRowIndex, int maximumRows)
{
    EmployeeInfoDataContext dbEmp = new EmployeeInfoDataContext();
    var query = from emp in dbEmp.Employees
                join dept in dbEmp.Departments
                    on emp.DeptID equals dept.DeptID
                select new
                {
                    EmpID = emp.EmpID,
                    EmpName = emp.EmpName,
                    Age = emp.Age,
                    Address = emp.Address,
                    DeptName = dept.DepartmentName
                };

    return query.Skip(startRowIndex).Take(maximumRows);
} 
Run Code Online (Sandbox Code Playgroud)

public int GetEmployeeCount()
{
    // How can I not repeat the logic above to get the count?
}
Run Code Online (Sandbox Code Playgroud)

如何GetEmployeeCount从第一种方法获取第二种方法的值BindEmployees?我的意思是不重复逻辑(查询)?

Mar*_*ell 18

一种选择是:

public IQueryable BindEmployees(int startRowIndex, int maximumRows, out int count)
{
    EmployeeInfoDataContext dbEmp = new EmployeeInfoDataContext();
    var query = from emp in dbEmp.Employees
                join dept in dbEmp.Departments
                    on emp.DeptID equals dept.DeptID
                select new
                {
                    EmpID = emp.EmpID,
                    EmpName = emp.EmpName,
                    Age = emp.Age,
                    Address = emp.Address,
                    DeptName = dept.DepartmentName
                };

    count = query.Count();
    return query.Skip(startRowIndex).Take(maximumRows);
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是将查询传递分页功能.

  • @Deeps如果有疑问,为什么不只是*衡量哪个表现更好? (3认同)
  • @Jack - 好吧,你可以;但 Count 扩展方法是为“IQueryable<T>”定义的 - 而不是“IQueryable” (2认同)