2014-02-12 2 views
1

Я использую Linq и имеют следующий код C#:OrderByDescending не работает должным образом в Linq

leaves = GetAnnualLeaves(); 
otherleaves = GetOtherLeaves(); 
leaves.AddRange(otherleaves); 
leaves.OrderByDescending(e => e.StartDate); 

В основном я пытаюсь отобразить список ежегодных и других листьев, и я хочу, чтобы отобразить их в убывающем порядке. Проблема заключается в том, что в конце «Ежегодных листьев» всегда есть «Другие листья», несмотря ни на что. Так что в основном это показывает, как это:

2013-06-29 Annual 
2012-01-01 Annual 
2011-05-02 Annual 
2013-05-01 Other 

Когда на самом деле он должен показать, как это:

2013-06-29 Annual 
2013-05-01 Other 
2012-01-01 Annual 
2011-05-02 Annual 

Любая идея, почему заказ по убыванию не работает?

EDIT

Я получаю ошибку литья, когда я использую CONCAT.

И «Ежегодный» и «Другие» листья того же типа, но когда я

leaves = leaves.Concat(otherleaves) 

тогда проект не компилируется и дает ошибку

Cannot implicitly convert type System.Collections.Generic.IEnumerable<MyEntity> to System.Collections.Generic.List<MyEntity> 

И если тип я литье:

leaves = (List<MyEntity>)leaves.Concat(otherleaves) 

после этого я получаю ошибку времени выполнения.

+3

'leaves = leaves.OrderByDescending (e => e.StartDate);'? Или измените переменную, если типы не совпадают. –

ответ

7

Вы не назначите результат OrderByDescending

leaves = leaves.OrderByDescending(e => e.StartDate).ToList(); 

или сделать

leaves = leaves.Concat(otherleaves).OrderByDescending(e => e.StartDate).ToList(); 
+0

Я сделал первый код, но все тот же вопрос. Теперь в рамках Ежегодных листов элементы сортируются, но другие листья все еще находятся в конце. –

+0

И 'leaves.AddRange (otherleaves);' вызывается до этого? вы попробовали второй пример? – dkozl

+0

Да, это до заказа по коду. Позвольте мне попробовать второй пример. –

0

OrderByDescending

не упорядочивает список, она возвращает новый упорядоченный IEnumerable. Поэтому используйте результат из OrderByDescending, чтобы отобразить ваши товары.

1

OrderByDescending не "как бы на месте". Он скорее возвращает IOrderedEnumerable, который вы должны назначить переменной.

var orderedLeaves = leaves.OrderByDescending(e => e.StartDate); 
+0

Теперь в пределах Ежегодных Листей отсортированы, но другие Листы все еще в конце. –

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