今天在使用 LINQ 时,我了解到 LINQ to entities 不支持 TakeWhile(),是否有任何有效的方法来实现这样的功能?我的用例如下 -
I have an Employee entity, and I have sorted the entity by Name, now I want to fetch the records from this IQueryable till the time (EmployeeID = 123)
是这样的——
IQueryable<Employee> employees = ObjectContext.Employees
.OrderBy(a => a.Name)
.TakeWhile(a => a.EmployeeId != 123)
但是在上面的代码中,Linq to Entities 不支持 TakeWhile,因此会抛出错误。
我正在尝试以下方法,如果有人有更好更有效的方法,请告诉我:
- 获取前X条记录,
- 检查所需的 EmployeeId 是否是其中的一部分,
- 如果不是则获取下一组 X 记录
- 并将它们与之前的集合连接起来
- 并再次检查 EmployeeID 是否是其中的一部分,
- 当在 X 记录集中找到匹配的 EmployeeId 时,中断循环。
最佳答案
您不应按Name
排序,而应将其存储在某处Id
。也许,这会有所帮助:
// eager loading of employees, which name is less or equal, than stored name:
ObjectContext.Employees.Where(a => a.Name.CompareTo(storedName) < 0 || a.Name.CompareTo(storedName) == 0)
// lazy loading the rest of employees:
ObjectContext.Employees.Where(a => a.Name.CompareTo(storedName) > 0)
关于c# - 如何实现 Linq to Entities IQueryable TakeWhile() 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17145352/