2012-04-16 124 views
2

我无法弄清楚如何做到这一点,这两个问题不适合我。一个说我不能使用委托和比较器,另一个说它不能将lambda转换成委托。通过日期属性排序通用列表<T>

Sort Generic List

How do I sort a generic list?

我有ScheduleItemGenericList<T>。每个物品都有PaymentDate属性,这是DateTime?

我基本上想对这个属性排序(旧 - >最新)。最简单的方法是什么?

首先我尝试这样做:

transaction.ScheduleCollection.Sort(delegate(ScheduleItem p1, ScheduleItem p2) 
       { 
        return p1.PaymentDate.CompareTo(p2.PaymentDate); 
       }); 

而且我得到这两个错误:

无法转换为键入“System.Collections.IComparer” 匿名方法,因为它不是委托类型

'System.Nullable'不包含 'CompareTo'的定义,并且没有扩展方法'CompareTo'接受第一个类型“System.Nullable” 0参数可以发现 (是否缺少using指令或程序集引用?)

而另外一个我想是这样的:

transaction.ScheduleCollection.Sort((lhs, rhs) => (lhs.PaymentDate.CompareTo(rhs.PaymentDate))); 

,并得到

无法转换为键入“System.Collections.IComparer” 匿名方法,因为它不是一个委托类型

public void Sort(IComparer comparer); 

这是我必须使用的排序方法。

+6

很难告诉你在做错误的完美解决方案的好东西,当你不提供任何代码.. – 2012-04-16 18:35:17

+0

当然,让我补充一些。 – slandau 2012-04-16 18:35:35

+0

添加代码Jon。谢谢 – slandau 2012-04-16 18:38:34

回答

8

您是否想过使用LINQ

喜欢的东西: var list = list.OrderBy(x => x.PaymentDate).ToList();

+0

它没有'Distinct()',因为它是'GenericList ',而不是'List ' – slandau 2012-04-16 18:40:17

+0

@slandau编辑我的答案,查看它。 – 2012-04-16 18:41:29

+2

什么是GenericList?你做了什么? – aquinas 2012-04-16 19:04:10

3

使用LINQ lambda函数:

var OrderScheduleItem = ScheduleItems.OrderBy(p => p.PaymentDate);