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# 为什么orderbydescending没有重新排列列表?_C#_Linq_Generics - Fatal编程技术网

C# 为什么orderbydescending没有重新排列列表?

C# 为什么orderbydescending没有重新排列列表?,c#,linq,generics,C#,Linq,Generics,我理解orderbydescending实际上并没有重新排列列表的顺序,对吗?如果是这样的话,最好的解决方法是什么 newList= myOldList.OrderByDescending(x => x.DateTime) .ThenBy(x => x.Status) .Where(x => x.Status != StatusEnum.Complete).ToLis

我理解orderbydescending实际上并没有重新排列列表的顺序,对吗?如果是这样的话,最好的解决方法是什么

newList= myOldList.OrderByDescending(x => x.DateTime)
                            .ThenBy(x => x.Status)
                            .Where(x => x.Status != StatusEnum.Complete).ToList();
这似乎并不是真正的重新安排他们,什么是最有效的方法


谢谢。

您需要在筛选结果后对其进行排序,
其中
返回一个
IEnumerable
,而不是
IORDerenumerable

但是您可以正确地说,对集合使用order方法并不会对集合本身进行排序。它确实返回集合的有序版本


编辑:正如Tim Schmelter在评论中所说,
Where
不会改变顺序,但如果要对数据进行排序,最好返回相应的界面。

在过滤结果后需要对其进行排序,
Where
返回一个
IEnumerable
,而不是
IOrderenumerable

但是您可以正确地说,对集合使用order方法并不会对集合本身进行排序。它确实返回集合的有序版本


编辑:正如Tim Schmelter在评论中所说,
Where
不会更改顺序,但如果要对数据进行排序,最好返回相应的界面。

您需要更改调用Linq查询链的顺序

newList= myOldList.Where(x => x.Status != StatusEnum.Complete).OrderByDescending(x => x.DateTime)
                        .ThenBy(x => x.Status)
                        .ToList();

您需要更改调用Linq查询链的顺序

newList= myOldList.Where(x => x.Status != StatusEnum.Complete).OrderByDescending(x => x.DateTime)
                        .ThenBy(x => x.Status)
                        .ToList();


以什么方式重新排列它们?试着按顺序排列,在那里你可以提供一个小样本来演示这个问题吗?如果要对旧列表进行排序,则必须将
newList
重新指定给
myollist
。还应注意,在枚举上排序使用的是基础数值,而不是标签。如果StatusEnum.Complete的基础值为1,StatusEnum.InProgress的基础值为0,则InProgress将在排序后的输出中位于Complete之前。以何种方式重新排列它们?请尝试按以下顺序排列,其中第条您可以提供一个小示例来演示此问题吗?如果要对旧列表进行排序,则必须将
newList
重新指定给
myollist
。还应注意,在枚举上排序使用的是基础数值,而不是标签。如果StatusEnum.Complete的基础值为1,而StatusEnum.InProgress的基础值为0,则InProgress将在排序后的输出中位于Complete之前。但
中的
不会更改顺序。使用
Where
第一个更好,因为要订购的东西更少。不需要;如果查询数据库;结果将是IQueryable而不是IEnumerable。@AlexSuleap:但它是关于一个与对象无关的列表。@AlexSuleap列表对于一个
IQueryable
;-)来说是个糟糕的名字首先排序然后提取结果将比提取结果和排序慢。原因:为了对列表进行排序,linq使用快速排序,平均为O(n logn)。提取的结果是O(n)。排序较小的列表更快。但是
Where
不会改变顺序。使用
Where
第一个更好,因为要订购的东西更少。不需要;如果查询数据库;结果将是IQueryable而不是IEnumerable。@AlexSuleap:但它是关于一个与对象无关的列表。@AlexSuleap列表对于一个
IQueryable
;-)来说是个糟糕的名字首先排序然后提取结果将比提取结果和排序慢。原因:为了对列表进行排序,linq使用快速排序,平均为O(n logn)。提取的结果是O(n)。排序较小的列表更快。为什么需要它?
Where
应该保持顺序,而首先过滤肯定是个好主意,是否需要它?为什么需要它?
Where
应该保持顺序,而首先过滤肯定是个好主意,是否需要它?