2012-02-05 3 views
1

У меня есть DataColumn из DateTime datatype, и я хочу заказать год в порядке убывания, а затем месяц в порядке убывания.Как сделать заказ по дате?

Вот что я пробовал:

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

Я получаю ошибку о неверном броска, потому что оба Year и Month являются ИНТ типы данных, но я указанием DateTime в <>

Любые идеи?

+0

Если вы заказываете DateTimes в порядке убывания, не по годам, а по месяцу, как вы говорите, хотите? – DOK

+0

@ DOK - Просто хотел, чтобы он сортировался по годам и месяцам, но не день. –

ответ

3

Вы не должны получать ошибку приведения из-за этого - вы уверены, что это поле действительно a DateTime?

Это звучит, как вы действительно просто хотите

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

в любом случае, учитывая, что заказ на год и месяц нисходящая в основном заказе по дате по убыванию, за исключением того, что ничего не делать с " день ". Вы действительно не хотите включать «день» в свой заказ?

+0

О, похоже, теперь это строка ... Ты прав. Думаю, мне нужно преобразовать его в тип DateTime в вызове OrderByDescending(). –

+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

Да, я согласен, что это странный случай. Я не хочу, чтобы часть дня влияла на сортировку. Таким образом, у меня есть конкретное бизнес-правило. Вот в чем причина. –

Смежные вопросы