2012-04-16 91 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);