Изменение порядка коллекции, что я делаю не так? - PullRequest
4 голосов
/ 04 ноября 2010

Мне нужно переупорядочить коллекцию. Окончательный результат должен состоять в том, что все элементы в коллекциях, которые имеют propertyOne> 0 и PropertyTwo = 0, должны быть первыми, а затем остальные должны следовать

Я сделал следующеено я не уверен, почему это не работает!

IOrderedEnumerable<OrderLineItem> orderedItemList= 

OrderList.Cast<OrderLineItem>()
      .OrderBy(x => x.PropertyOne > 0)
      .ThenBy(x => x.PropertyTwo == 0);

Есть предложения?

Ответы [ 5 ]

10 голосов
/ 04 ноября 2010

Вы упорядочиваете свою коллекцию, сравнивая то, что возвращают ваши лямбды, то есть логические значения.true больше false.Поэтому вам нужно либо использовать OrderByDescending () :

var orderedItems
    = OrderList.Cast<OrderLineItem>()
               .OrderByDescending(x => x.PropertyOne > 0)
               .ThenByDescending(x => x.PropertyTwo == 0);

, либо инвертировать ваши предикаты:

var orderedItems
    = OrderList.Cast<OrderLineItem>()
               .OrderBy(x => x.PropertyOne <= 0)
               .ThenBy(x => x.PropertyTwo != 0);
1 голос
/ 04 ноября 2010
var orderedList = OrderList.Cast<OrderLineItem>()
      .OrderBy(x => x.PropertyOne > 0)
      .ThenBy(x=> x.PropertyTwo == 0);

Нужно сравнить, не назначать "ThenBy"

0 голосов
/ 04 ноября 2010

Вы ищете что-то подобное?

IOrderedEnumerable<OrderLineItem> orderedItemList=     
OrderList.Cast<OrderLineItem>()
      .OrderBy(x => (x.PropertyOne > 0 && x.PropertyTwo == 0) ? 0 : 1);

Это приведет к тому, что оба критерия верны в первую очередь, а все остальные после. Если я неверно истолковываю вашу спецификацию, не обращайте внимания.

0 голосов
/ 04 ноября 2010

Как насчет этого?

IOrderedEnumerable<OrderLineItem> orderedItemList= 

OrderList.Cast<OrderLineItem>()
      .OrderBy(x => (x.PropertyOne > 0 && x.PropertyTwo == 0) ? 0 : 1);
0 голосов
/ 04 ноября 2010

Вы должны использовать == не = в ThenBy

...