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