2017-09-08 13 views
0

私はデータベース(SQLサーバー)テーブルが100,000以上のレコードを持っています。テーブルには、0〜5の値を持つenum(DBのsmallInt)が含まれています(フロントエンドのC#)。その列挙型で並べ替えられた上位10個のレコードを取得するコードを記述しています。 カスタムオーダーをご希望です。列挙型の値が2のレコードは、最初に4、次に3、同様に来るはずです。linqすべてのレコードを取ることなくカスタム注文

すべてのレコードを取得し、icomparerを使用してソートしてからトップ10にしたいとは思いません。どのようにしてそのlinq文を書くべきですか? SQLコマンドでさえ、私にとっては大丈夫です。

+0

トップ10の基準は何ですか? – Amit

+0

[this](https://stackoverflow.com/questions/40268347/linq-expression-for-ordering-entities-based-on-static-values?noredirect=1&lq=1)と[this](https: /stackoverflow.com/questions/40202415/order-by-enum-description/40203664#40203664)。 –

答えて

1

Enumの値を割り当てて、テンポラリテーブルを作成します。そして、インナーはあなたのテーブルと結合、および順序はOrderにより、カラム

CREATE TABLE [#EnumOrder] (
    [Enum] SMALLINT 
    ,[Order] SMALLINT 
    ) 

    INSERT INTO [#EnumOrder] 
    VALUES 
    (2, 1), 
    (4, 2), 
    (3, 3), 
    (5, 4), 
    (0, 5), 
    (1, 6) 

SELECT TOP 10 t.* 
FROM dbo.[YourTable] t 
INNER JOIN [#EnumOrder] o ON t.EnumColumn = o.Enum 
ORDER BY o.[Order] 

DROP TABLE [#EnumOrder] 

は今のレコードは、この順にソートされます:2、4、3、5、0と1あなたはいつもあなたがしたい値を変更することができます[#EnumOrder]テーブルに挿入して、必要な注文を取得します。

関連する問題