2012-02-05 77 views
1

我有一個DataColumnDateTime數據類型,我想按降序排列,然後按月降序排列。如何按日期訂購部件?

這裏是我的嘗試:

table.AsEnumerable() 
    .OrderByDescending(o => o.Field<DateTime>("MaxDateTaken").Year) 
    .ThenByDescending(o => o.Field<DateTime>("MaxDateTaken").Month) 

我得到一個無效的轉換錯誤,因爲這兩個YearMonth是INT數據類型,但我在<>

任何想法指定DateTime

+0

如果您訂購日期時間降序,他們不是按年份,然後按月份,就像你說你想要的? – DOK 2012-02-05 19:13:40

+0

@DOK - 只希望它按年份和月份排序,但不是一天。 – 2012-02-05 19:28:08

回答

3

你不應該因爲這個 - 你確定這個字段是真的嗎 a DateTime

這聽起來像你真的只是

table.AsEnumerable() 
    .OrderByDescending(o => o.Field<DateTime>("MaxDateTaken")) 

無論如何,考慮到在今年訂購和一個月下降基本上是由日期降序排列,但它不會做任何事情「日「部分。你真的不想在訂購中加入「日」部分嗎?

+0

哦,看起來現在是一個字符串...你說得對。我想我需要將它轉換爲OrderByDescending()調用中的DateTime類型。 – 2012-02-05 19:22:27

+1

@ subt13:那肯定會解釋它。如果你可以*可能*改變源代碼中的數據類型,那將比在客戶端解析它更加簡潔,這是另一個明顯的可能性。 – 2012-02-05 19:23:10

+0

不幸的是,它作爲動態數據透視查詢的一部分來自SQL服務器,所以我不能改變類型。 – 2012-02-05 19:25:12

0

我固定它是這樣的:

table = table.AsEnumerable() 
    .OrderByDescending(o => DateTime.Parse(o.Field<string>("MaxDateTaken")).Year) 
    .OrderByDescending(o => DateTime.Parse(o.Field<string>("MaxDateTaken")).Month) 
1

你爲什麼忽略了一天的一部分?它可以變得更簡單:

table = table.AsEnumerable() 
    .OrderByDescending(o => DateTime.Parse(o.Field<string>("MaxDateTaken"))) 
+0

是的,我同意這是一個奇怪的情況。我不想讓一天的部分影響排序。我有一個特定的業務規則,以這種方式訂購。這就是原因。 – 2012-02-05 19:42:27