gpt4 book ai didi

c# - 如何实现 Linq to Entities IQueryable TakeWhile() 功能

转载 作者:太空宇宙 更新时间:2023-11-03 16:11:55 25 4
gpt4 key购买 nike

今天在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com