2011-05-17 147 views
1

我有僱員對象的列表.Employee類可以如下:訂購C#中的列表

Class Emplyoyee 
{ 
    public string name; 
    public string DateOFJoining; //Please note here date is in string format 
} 

現在我想顯示員工與最新的員工在上面的列表,所以我用下面的代碼它:

List<Employee> lst = GetEmployes();   
lst = lst.OrderByDescending(x => x.DateOFJoining).ToList(); 

//Here binding to the repeater 
rptEmp.DataSource = lst.Take(2); 
rptEmp.DataBind(); 

問題:在這裏它的排序治療日期爲字符串。但我想按日期排序。任何人都可以幫助我嗎?

在此先感謝。

+4

任何回答的不是一部分,但你應該'取(2)'然後'ToList()',以免造成大名單然後你扔掉;代碼將是'lst = lst.OrderByDescending(x => x.DateOFJoining).Take(2).ToList()'。 – 2011-05-17 14:14:47

+0

謝謝你,克里斯,這是一個非常有用的提示。 – nimesh 2011-05-18 03:10:20

回答

7

您將需要x.DateOfJoining轉換爲DateTimeOrderByDescending表達。如果您在日期的質量有信心,你可以嘗試:

lst = lst.OrderByDescending(x => DateTime.Parse(x.DateOfJoining)).ToList(); 
+0

謝謝dlev​​,它的工作:) – nimesh 2011-05-18 03:10:50

+0

@nimesh很高興聽到它!在這種情況下,請隨時將其標記爲接受的答案。 – dlev 2011-05-20 02:07:19

3

您可以讓Employee實現System.IComparable接口。然後使用List.Sort()方法來訂購員工。

例如:

Class Employee : IComparable 
{ 
    public string name; 
    public string DateOFJoining; //Please note here date is in string format 

    public int CompareTo(object obj) { 
     if(obj is Employee) { 
      Employee= (Employee) obj; 

      return Convert.ToDateTime(DateOfJoining).CompareTo(Convert.ToDateTime(e.DateOfJoining)); 
     } 

     throw new ArgumentException("object is not an Employee");  
    } 
} 
+2

當然,您需要確保DateOFJoining包含格式正確的日期。 (否則Convert會拋出異常) – 2011-05-17 14:23:30