2010-02-16 32 views
3

我有一個List<MyClass>,我想按照MyClass的DateTime CreateDate屬性對它進行排序。使用LINQ對類列表進行排序

LINQ可以嗎?

感謝

+0

你的意思是由酒店CREATEDATE這是DateTime類型的? –

+0

是我的首席財產 – Kubi

回答

4

您可以按排序順序列舉它:

IEnumerable<MyClass> result = list.OrderBy(element => element.CreateDate); 

您還可以使用ToList()轉換到一個新的列表並重新分配給原來的變量:

list = list.OrderBy(element => element.CreateDate).ToList(); 

這與排序原始列表並不完全相同,因爲如果任何人仍舊參照舊列表,他們將看不到新的排序。如果您確實想要對原始列表進行分類,那麼您需要使用List<T>.Sort方法。

+0

我怎樣才能把最新的最上面?通過asc? – Kubi

+1

'OrderByDescending'而不是'OrderBy' –

+0

+1。精湛,謝謝你張貼這個。 – adrianos

1

這裏有一個例子:

using System.Collections.Generic; 
using System.Linq; 

namespace Demo 
{ 
    public class Test 
    { 
     public void SortTest() 
     { 
      var myList = new List<Item> { new Item { Name = "Test", Id = 1, CreateDate = DateTime.Now.AddYears(-1) }, new Item { Name = "Other", Id = 1, CreateDate = DateTime.Now.AddYears(-2) } }; 
      var result = myList.OrderBy(x => x.CreateDate); 
     } 
    } 

    public class Item 
    { 
     public string Name { get; set; } 
     public int Id { get; set; } 
     public DateTime CreateDate { get; set; } 
    } 
} 
+1

「你有沒有試過用linq?」大聲笑 - 這就是問題所在! – Aaronaught

+0

雅是一個錯字...大聲笑 – anthonyv

0

當然其他的答案與.OrderBy()工作,但你不會,而讓你的源項目從IComparable繼承並調用.Sort()

5

要排序現有列表:

list.Sort((x,y) => x.CreateDate.CompareTo(y.CreateDate)); 

也可以寫一個Sort擴展方法,允許:

list.Sort(x => x.CreateDate); 

例如:

public static class ListExt { 
    public static void Sort<TSource, TValue>(
      this List<TSource> list, 
      Func<TSource, TValue> selector) { 
     if (list == null) throw new ArgumentNullException("list"); 
     if (selector == null) throw new ArgumentNullException("selector"); 
     var comparer = Comparer<TValue>.Default; 
     list.Sort((x,y) => comparer.Compare(selector(x), selector(y))); 
    } 
} 
+0

+1顯示此 – Kubi

0
 class T { 
      public DateTime CreatedDate { get; set; } 
     } 

使用方法:

List<T> ts = new List<T>(); 
ts.Add(new T { CreatedDate = DateTime.Now }); 
ts.Add(new T { CreatedDate = DateTime.Now }); 
ts.Sort((x,y) => DateTime.Compare(x.CreatedDate, y.CreatedDate)); 

相關問題