网站上有一些关于如何使用lambda表达式订购的帖子,但我似乎无法让我的工作。我正在尝试重新排序已填充的列表。我错误地认为我可以使用lambada表达式重新排列此列表的顺序吗?
QuarterMileTimes.OrderByDescending(c => c.PquartermileTime);
我想知道PquartermileTime是否是一个字符串?我也在日期试过这个表达
QuarterMileTimes.orderBy(c => c.RaceDay);
仍然没有运气我哪里出错了?
答案 0 :(得分:5)
当您致电OrderByDescending时,该方法会返回新 IEnumerable<T>
- 它不会对集合进行重新排序。
尝试做:
QuarterMileTimes = QuarterMileTimes.OrderByDescending(c => c.PquartermileTime).ToList();
(如果您的收藏品是List<T>
...)
答案 1 :(得分:1)
OrderByDescending
(以及所有其他Enumerable
扩展方法)的结果是IEnumerable<T>
,它按照您描述的顺序投射源数据。它不以任何方式改变原始数据。
如果您愿意,可以使用ToList()
扩展方法从该结果中创建新的List<T>
并将其分配回原始变量。
QuarterMileTimes = QuarterMileTimes.OrderByDescending(/*...*/).ToList();
(当然,假设QuarterMileTimes
是List<T>
)
答案的要点是否,OrderByDescending
不会以任何方式改变数据源。
答案 2 :(得分:1)
您将它分配给新变量不是吗?
var sortedTimes = QuarterMileTimes.OrderByDescending(c => c.PquartermileTime);
它不像例如List.Sort方法,对现有列表进行排序 必须将方法的结果分配给变量。
答案 3 :(得分:1)
OrderByDescending返回IOrderedEnumerable<T>
,即包含指定顺序的项目的新序列。您将不得不重新分配QuarterMileTimes以获得您期望的行为:
QuarterMileTimes = QuarterMileTimes.OrderByDescending(c => c.PquarterMileTime).ToList();
或者你可以单独使用返回的序列,这是常用的方法。
答案 4 :(得分:0)
QuarterMileTimes.OrderByDescending(c => c.PquartermileTime)
返回一个新的枚举,按PquartermileTime
排序。它不会重新排序QuarterMileTimes
。