5

オブジェクトのリストがあるとしましょう:

var items = new {
    new { Order = 0 },
    new { Order = 1 },
    new { Order = -1 },
    new { Order = 3 },
    new { Order = 2 },
    new { Order = -1 }
};

Order > -1アイテムが昇順で並べられたリストの一番上にあり、残りのアイテムがそれらに続くように注文する必要がありOrder == -1ます。

Conact()andWhere()句を使用するよりもエレガントな方法はありますか?

var orderedItems = items.Where(x => x.Order > -1).OrderBy(x => x.Order)
                   .Conact(items.Where(x => x.Order == -1);

したがって、このリストを並べ替えると、次のようになります。

var items = new {
    new { Order = 0 },
    new { Order = 1 },
    new { Order = 2 },
    new { Order = 3 },
    new { Order = -1 },
    new { Order = -1 }
};

またitems、実際のシナリオでのリストは、すでに複雑なIQueryable<T>オブジェクトです。そのため、このような選択的順序付けを行う最適な方法を見つけようとしています。

4

6 に答える 6

7

あなたはこれを試すことができます-それはあなたが期待する結果を生み出します:

items.OrderBy(x.Order => x.Order == -1).ThenBy(x.Order => x.Order);
于 2010-02-17T15:41:54.867 に答える
1

また、-1を最初に表示し、残りを降順で表示したい場合は、ここでカスタム比較ツールを使用しますが、どういうわけか、よりエレガントだと思います:)int用に作成されていることに注意してください

class Comparer : IComparer<int>
{
  public int Compare(int x, int y)
  {
    if (x == -1 || y == -1) return x - y;
    return y - x;
  }
}
于 2010-02-17T15:43:21.310 に答える