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

标签 c# linq linq-to-entities

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

相关文章:

c# - 免费网站测试工具

c# - 静态终结器

c# - SQL,合并两个表进行查询

linq - 复杂的 LINQ 或 EF 查询

c# - 比较日期时间,看看是否已经过去一小时

c# - Resx 文件并嵌入程序集

c# - Linq:创建表达式的逻辑逆

C# linq to xml,带属性的嵌套查询

c# - LINQ to Entities 无法识别方法 'System.TimeSpan Subtract(System.DateTime)' 方法

c# - LINQ to Entities 无法识别方法 'System.Object get_Item(System.String)' 方法