2017-09-08 8 views
0

나는 100,000 개가 넘는 레코드가있는 데이터베이스 (SQL 서버) 테이블을 가지고 있습니다. 테이블에 enum (DB에서 smallInt) 값이 0-5입니다. (프런트 엔드에 대한 C#) 그 enum에 의해 정렬 된 상위 10 개의 레코드를 가져 오는 코드를 작성하고 있습니다. 주문 주문가 필요합니다. enum 값이 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 값이있는 임시 테이블 [#EnumOrder]을 원하는 순서로 매핑하십시오. 그런 다음 내부는 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] 테이블에 삽입하여 원하는 주문을 받으십시오.