【问题标题】:The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' must be called before the method 'Skip'仅 LINQ to Entities 中的排序输入支持“跳过”方法。方法 'OrderBy' 必须在方法 'Skip' 之前调用
【发布时间】:2012-06-28 16:15:47
【问题描述】:

我正在处理动态数据。

创建动态模型并在 global.asax 中注册后,如

DefaultModel.RegisterContext(typeof(masterEntities1),new ContextConfiguration() { ScaffoldAllTables = true }); 

当我运行一个应用程序时,它会显示一个表格列表,但是当我单击任何一个表格时它会引发异常:

只有 LINQ to Entities 中的排序输入支持“跳过”方法。方法“OrderBy”必须在方法“Skip”之前调用。

但我没有在我的应用程序中声明任何查询。

【问题讨论】:

  • 我遇到了一些包含以下信息的网站。
  • 如果您使用实体框架作为数据模型,那么您必须更新每个实体的查询方法。您需要添加排序子句。您需要这样做的原因是,默认情况下,查询方法没有排序,并且在动态数据项目模板中,为列表和列表详细信息模板启用了分页。如果您不订购查询方法的结果并使用分页,当您访问列表/列表详细信息模板中的实体时,您将收到以下异常
  • 如:public IQueryable GetProducts() { return this.ObjectContext.Products.OrderBy(p=>p.ProductID); }
  • 但现在的问题是我应该在哪里对实体数据模型中的实体进行排序,以便当它映射到关系表时,它会在调用方法跳过之前按列表排序?

标签: exception entity-framework-4 linq-to-entities dynamic-data


【解决方案1】:

如果您使用.Skip 方法,则必须在查询中调用.OrderBy'。例如,如果您使用类似于以下内容的内容:

results = results.Skip(pageNumber * size).Take(size);

在上述情况下,如果您计划使用分页方法或类似方法,您之前必须使用.OrderBy 来订购查询。如果您有 Id 字段,将其添加到原始查询表达式中应该可以消除错误:

.OrderBy(x => x.Id);

【讨论】:

  • 既然隐含了按ID排序(如果数据来自数据库),那么skip方法不能也做出这样的假设吗?
猜你喜欢
  • 2014-03-09
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 2014-10-05
  • 1970-01-01
相关资源
最近更新 更多