C# 为什么orderbydescending没有重新排列列表?
我理解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
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
应该保持顺序,而首先过滤肯定是个好主意,是否需要它?