2012-01-23 69 views
0

我有一個具有ListOf訂單的Customer類。我正在嘗試按日期排序所有訂單。日期 「order_date的」 是YYYY字符串:MM:DD HH:MM:SS」格式LINQ OrderBy不排序

下面是代碼Lambda表達式:

Dim orders() = Customer.Orders.ToArray().OrderBy(Function(c) c.order_date).ToArray() 

這似乎並不被排序的日期。

我試圖轉換爲DateTime如果order_date的爲空或有一定的價值,但如果order_date的日期是空白的,然後它拋出一個異常,工作正常。

Dim orders() = Customer.Orders.OrderBy(Function(c) (Not String.IsNullOrEmpty(c.order_date))).ThenBy(Function(c) Convert.ToDateTime(c.order_date)).ToArray() 
+0

什麼的第一種方法的問題?什麼是輸入/輸出? –

+0

訂單未排序。 – Amir

+0

輸出與輸入相同嗎? –

回答

0

我可以向您正在使用VB看我使用C#,但你應該能夠翻譯

var orders = Customer.Orders.ToList().Sort((a,b)=> a.order_date.Compare(b.order_date)) 

MSDN有一個完整的文章here

如果你要使用LINQ2SQL /實體,然後你想要讓他們回來之前對數據庫排序依據記憶。在排序之前,您不需要執行ToArray()。也考慮對數據庫上發生的代碼使用linq語法。它清楚地給開發商,你要查詢

var orders = (from o in DataContext.Orders 
       where o.Customer.Id == customerId 
       orderby o.order_date 
       select o) 

下面是另一個例子

static void Main(string[] args) 
    { 
     var dates = new List<DateTime?>() 
        { 
         null, 
         null, 
         new DateTime(2001, 2, 3), 
         null, 
         new DateTime(2001, 12, 3), 
         new DateTime(2021, 12, 3) 
        }; 

     dates.Sort(CompareDates); 

    } 

    private static int CompareDates(DateTime? x, DateTime? y) 
    { 
     if (x == null) 
     { 
      return y == null ? 0 : -1; 
     } 
     return y == null ? 1 : x.Value.CompareTo(y.Value); 
    } 
+0

隱式或顯式調用'Comapre'方法有什麼區別? –

+0

這是否意味着我必須編寫一個比較函數。 Customer.Orders.ToList()。Sort((a,b)=> a.order_date.Compare(b.order_date)) 不會編譯 – Amir

+0

我使用比較方法爲您提供了一個完整的示例,它使用可空日期時間 – Peter