我有一个通用列表......
public List< ApprovalEventDto> ApprovalEvents
ApprovalEventDto
public class ApprovalEventDto
{
public string Event { get; set; }
public DateTime EventDate { get; set; }
}
如何按活动日期对列表进行排序?
答案 0 :(得分:11)
您可以按如下方式使用List.Sort():
ApprovalEvents.Sort((lhs, rhs) => (lhs.EventDate.CompareTo(rhs.EventDate)));
答案 1 :(得分:5)
using System.Linq;
void List<ApprovalEventDto> sort(List<ApprovalEventDto> list)
{ return list.OrderBy(x => x.EventDate).ToList();
}
答案 2 :(得分:3)
ApprovalEvents.Sort((x, y) => { return x.EventDate.CompareTo(y.EventDate); });
答案 3 :(得分:1)
如果您不需要就地排序,并且您使用的是.NET 3.5,我会按照marxidad的建议使用OrderBy。如果需要对现有列表进行排序,请使用List.Sort。
List.Sort可以使用比较代表或IComparer - 任何一个都可以工作,这只是一个更简单的工作案例。
在我的MiscUtil项目中,我有一个ProjectionComparer,它允许您指定排序键(就像对OrderBy一样),而不是必须自己使用两个参数并调用CompareTo。我个人认为更容易阅读,但当然,这取决于你。 (在MiscUtil中还有简单的方法可以反转和组合比较。有关示例,请参阅单元测试。)
答案 4 :(得分:0)
像Darksiders解决方案,但我更喜欢保持它不神秘:
ApprovalEvents.Sort((a, b) => (a.EventDate.CompareTo(b.EventDate)));
答案 5 :(得分:-1)
合并排序非常适合列表。有关详细信息,请参阅WikiPedia entry,基本上它是一种递归的n-Log n排序,不需要随机访问。
对于某些数据类型,您还可以使用pigeon holing获取订单n,但会占用更多内存。
答案 6 :(得分:-1)
您可以将List.Sort()方法与匿名方法或lambda表达式一起使用。更多 MSDN