1

我的代码的第一部分获取 IQueryable 数据结果:

var issues = repository.GetAllIssues().Where(i => 
                  i.IssueNotificationRecipients.Any(r => r.Status == "Open"));

然后我确定用户请求的排序顺序,并添加它:

switch (sort)
{
case 1:
    issues.OrderBy(x => x.Customer);
    break;
case 2:
    issues.OrderBy(x => x.Description);
    break;
case 3:
    issues.OrderBy(x => x.CreatedBy);
    break;
default:
    issues.OrderBy(x => x.DueDateTime);
    break;
}

这会引发错误:

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

那么如何动态添加 OrderBy 以响应用户的输入呢?

4

2 回答 2

2

您还没有向我们展示您的所有代码,但一个问题是您期望issues.OrderBy(..)改变变量引用的可查询对象issues。但它实际上并没有这样做。它返回一个新IOrderedQueryable的,表示原始可查询的有序版本。

由于您的订购操作实际上并没有触及被称为issues变量的可查询对象;Skip调用它会导致你得到错误是有道理的,因为它实际上并没有被排序。

你可能想做:

issues = issues.OrderBy(...);
于 2011-02-16T20:38:51.160 回答
2

你也许是说

switch (sort)
{
case 1:
    issues = issues.OrderBy(x => x.Customer);
    break;
case 2:
    issues = issues.OrderBy(x => x.Description);
    break;
case 3:
    issues = issues.OrderBy(x => x.CreatedBy);
    break;
default:
    issues = issues.OrderBy(x => x.DueDateTime);
    break;
}

您可能需要更改 的类型issues,或将其设置为新变量,因为它返回IOrderedQueryable<T>

于 2011-02-16T20:39:12.357 回答