尝试使用IQueryable自定义OrderBy - “跳过”方法错误

时间:2011-02-16 20:30:43

标签: c# linq sql-order-by skip

我的代码的第一部分获取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以响应用户的输入?

2 个答案:

答案 0 :(得分:2)

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

由于您的订购操作实际上并未触及被称为issues变量的可查询对象;在它上面调用Skip导致你得到的错误是有意义的,因为实际上没有

您可能想要这样做:

issues = issues.OrderBy(...);

答案 1 :(得分: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>