2011-12-08 2 views
7

私はクラスOfferにファイルカテゴリを含んでいます。リストを並べ替え、特定の値が上にくるようにします。

特定のカテゴリのすべてのオファーが上に表示され、その後にすべてのオファーが表示されます。

私はこれを試しましたが、無駄なことは何をお勧めしますか?

Offers = Offers.OrderBy(x => x.Category == "Corporate").ToList(); 
+0

あなたは「無駄」と言うとき、その式の結果はどうなりますか?どうしたの? –

+0

http://stackoverflow.com/questions/728319/linq-orderby-against-specific-values –

+1

正しくソートされず、元の順序になっているようです。 – Wesley

答えて

19

あなたはブール値falseで注文する(0)true(1)の前に来ます。述語に一致する要素を取得するにはまず、あなたはOrderByDescendingを使用して、ソート順序を逆にする必要があります

Offers = Offers.OrderByDescending(x => x.Category == "Corporate").ToList(); 
+0

+1良い解決策 –

+0

ええ、これは他のすべての順序も逆になります。 'OrderBy(x => x.Category!=" Corporate ")'を試してください。 –

+3

+1。そしておそらくThenBy(x => x.Category)を追加して、残りのオファーをカテゴリ名でソートします。 –

10

C# Language Specification 5.0truefalse値のバイト表現を指定していません。したがって、true1であるという前提に頼らない方がよい。また、ブール式x.Category == "Corporate"によるソート結果は明らかではありません。trueも同様に負の値で表すことができます。したがって、私はソート値を明示的に指定するために三項演算子を使用します:

Offers = Offers 
    .OrderBy(x => x.Category == "Corporate" ? 0 : 1) 
    .ThenBy(x => x.Category) 
    .ThenBy(x => x.Date) // or what ever 
    .ToList(); 
関連する問題