2012-02-05 17 views
1

私はDataColumnDateTimeデータ型を持っています。降順で降順で、年を降順で並べ替える必要があります。日付部分の注文方法は?

は、ここに私が試したものです:

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

任意のアイデアをYearMonthの両方がintデータ型であるため、私は、無効なキャストエラーを取得するが、私は<>

DateTimeを指定していますか?

+0

をして:それは単純に得ることができますか? – DOK

+0

@DOK - ちょうど年と月でソートされたかったが、日ではなかった。 –

答えて

3

キャストエラーが発生しないようにする必要があります。フィールドがの場合、実際にはと入力してください。DateTime

は、それはあなたが本当にはただ与えられた、とにかく

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

をしたいように聞こえるその年によって発注と月の下降は、基本的にはして何もしないを除いて、日付の降順で注文されました "日の部分。あなたは本当にあなたの注文に「日」の部分を含めたくないですか?

+0

ああ、今は文字列のように見えます...あなたが正しいです。私はそれをOrderByDescending()呼び出し内のDateTime型に変換する必要があると思います。 –

+1

@ subt13:それは確かにそれを説明します。ソース内のデータ型を変更する*可能性がある*場合は、それはクライアントで解析するよりははるかにうまくいくでしょう。これは別の明らかな可能性です。 –

+0

残念ながら、それは動的ピボットクエリの一部としてSQLサーバから降りてくるので、タイプを変更することはできません。 –

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

はい、私はそれが奇妙なケースであることに同意します。私はその日の部分が並べ替えに影響しないようにしたい。私はこのように注文する特定のビジネスルールを持っています。それが理由。 –

関連する問題