3

私が抱えている注文の問題に対するエレガントな解決策を探しています。

名前順に並べられた結果のリストを返すデータベース クエリがあります。結果には常に、結果のリストの最初に表示される必要がある「メイン アイテム」と呼ばれる 1 つのアイテムが含まれます。このアイテムは、データベース内の別のフィールドによってフラグ付けされていないため、名前で識別する必要があります。

たとえば、結果が次のようになっているとします。

"A Item"
"B Item"
"Main Item"
"Y Item"
"Z Item"

アルファベット順のままにする必要がありますが、「メインアイテム」が最初に表示されることを除いて:

"Main Item"
"A Item"
"B Item"
"Y Item"
"Z Item"

このデータを返すクエリは pl/sql で記述されており、クエリを変更するか、結果オブジェクトのコレクションを含む IEnumerable オブジェクトがある .Net 側で何かを行うことができます。

4

3 に答える 3

3

注文を積み重ねることができます:

query
  .OrderBy(item => item.Title) // alphabetical
  .OrderByDescending(item => item.Title == "Main Item"); // put Main Item first, bool==true

編集

リストは事前注文されています。OrderByその場合は 2 番目だけが必要です

query.OrderByDescending(item => item.Title == "Main Item");
于 2012-04-30T23:27:56.763 に答える
0

このクエリを試してください:

SELECT * 
FROM MyTable 
ORDER BY 
        CASE 
            WHEN Name = 'Main Item' THEN ' ' 
            ELSE Name 
        END
于 2012-04-30T23:28:04.633 に答える
0

私はpayoの回答が好きですが、単純な要素の移動ロジックではなく、コレクション全体を2回繰り返すため、この回答も投稿するのが適切だと思います:

List<MyClass> items = GetItemsFromDB();

int i = items.FindIndex(x => x.Name == "Main Item");

MyClass mainItem = items[i];
items.RemoveAt(i);
items.Insert(0, mainItem);
于 2012-05-01T00:15:19.520 に答える