填充列表上的lambda表达式

时间:2010-02-01 23:10:08

标签: c# asp.net lambda

网站上有一些关于如何使用lambda表达式订购的帖子,但我似乎无法让我的工作。我正在尝试重新排序已填充的列表。我错误地认为我可以使用lambada表达式重新排列此列表的顺序吗?

QuarterMileTimes.OrderByDescending(c => c.PquartermileTime); 

我想知道PquartermileTime是否是一个字符串?我也在日期试过这个表达

QuarterMileTimes.orderBy(c => c.RaceDay);

仍然没有运气我哪里出错了?

5 个答案:

答案 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();

(当然,假设QuarterMileTimesList<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