2017-09-08 1 views
0

J'ai une table de base de données (serveur SQL) avec plus de 100k enregistrements. La table contient enum (smallInt dans DB) qui a des valeurs de 0 à 5. (C# pour front end) J'écris le code pour aller chercher les 10 meilleurs enregistrements ordonnés par cette énumération. Je veux une commande personnalisée. comme les enregistrements avec la valeur enum 2 devrait venir d'abord puis 4 puis 3 et de même.linq Commande personnalisée sans prendre tous les enregistrements

Je ne veux pas obtenir tous les enregistrements et ensuite le trier en utilisant icomparer puis prendre le top 10. Comment dois-je écrire cette instruction linq. Même la commande SQL est aussi bien pour moi.

+0

Quel est votre top 10 des critères? – Amit

+0

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

Répondre

1

Créez une table temporaire [#EnumOrder] avec Enum mappage des valeurs dans l'ordre souhaité. Puis jointure avec votre table, et l'ordre de la colonne 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] 

maintenant les dossiers seront classés dans cet ordre: 2, 4, 3, 5, 0 et 1. Vous pouvez toujours changer les valeurs que vous souhaitez insérer au tableau [#EnumOrder] pour obtenir l'ordre que vous voulez.