Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在尝试使用IQueryable-“自定义OrderBy”;跳过“;方法错误_C#_Linq_Sql Order By_Skip - Fatal编程技术网

C# 正在尝试使用IQueryable-“自定义OrderBy”;跳过“;方法错误

C# 正在尝试使用IQueryable-“自定义OrderBy”;跳过“;方法错误,c#,linq,sql-order-by,skip,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);

代码的第一部分获取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中已排序的输入到实体。 必须调用方法“OrderBy” 在“跳过”方法之前


那么,如何根据用户的输入动态添加OrderBy呢?

您还没有向我们展示您的所有代码,但有一个问题是您预期会出现
问题。OrderBy(…)
会修改
问题
变量引用的可查询项。但它实际上并没有做到这一点;它返回一个新的
IOrderedQueryable
,表示原始queryable的有序版本

因为您的排序操作实际上没有触及被称为
问题的
变量的可查询项;对它调用
Skip
会导致您得到的错误,这是有道理的,因为它实际上还没有被排序

您可能想做:

issues = issues.OrderBy(...);

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

因为您的排序操作实际上没有触及被称为
问题的
变量的可查询项;对它调用
Skip
会导致您得到的错误,这是有道理的,因为它实际上还没有被排序

您可能想做:

issues = issues.OrderBy(...);
你可能是说

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;
}
您可能需要更改
问题的类型
,或者将其设置为新变量,因为它返回
IOrderedQueryable

您的意思是什么

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;
}

您可能需要更改
问题的类型
,或者将其设置为一个新变量,因为它返回
IOrderedQueryable

这个答案是一个救命稻草!我的大多数实体在我的服务类中调用ToList,因为我返回少量记录。我开始使用IQueryable返回较大的集合,但我不明白OrderBy为什么不工作。使用不同的变量返回IOrderedQueryable,它修复了所有问题。谢谢。这个答案真是救命稻草!我的大多数实体在我的服务类中调用ToList,因为我返回少量记录。我开始使用IQueryable返回较大的集合,但我不明白OrderBy为什么不工作。使用不同的变量返回IOrderedQueryable,它修复了所有问题。谢谢