1 votes

Linq2Sql ne peut pas ordonner par type anonyme ?

J'ai un code SQL qui effectue un ordre par cas. Cela fonctionne bien. Je ne peux pas le répliquer en Linq2Sql.

Voici une version rapide du SQL que j'ai fait, simplifié et vraiment simplifié. Je vous prie d'ignorer ce que le SQL essaie de faire (du point de vue de la logique d'entreprise) car je l'ai inventé, pour la question.

SELECT      
    u.Id,
    u.Name
FROM Users u
ORDER BY CASE 
            WHEN u.Name IS NULL THEN 1
            WHEN LEN(u.Name) < 3 THEN 2
            WHEN LEN(u.Name) < 10 THEN 3
            WHEN LEN(u.Name) < 5555 THEN 4
            ELSE 5
        END ASC

Lorsque j'essaie de faire cela avec Linq2Sql, j'obtiens une erreur anonyme.

Voici le code Linq2Sql :_

from u in db.User
orderby new {
            UserNameType = (u.Name == null ? 1 :
                            u.Name.Length < 3 ? 2 :
                            u.Name.Length < 10 ? 3 :
                            u.Name.Length < 5555 ? 4 :
                            5)
             }
select u;

Comment puis-je commander une déclaration de cas ?

4voto

GalacticCowboy Points 8185

Ne construisez pas de type anonyme, effectuez vos opérations conditionnelles directement sur votre objet.

orderby (u.Name == null ? 1 :
         u.Name.Length < 3 ? 2 :
         u.Name.Length < 10 ? 3 :
         u.Name.Length < 5555 ? 4 :
         5)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X