IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linq Discussion :

[C#] LINQ to SQL => orderby dynamique (en string)


Sujet :

Linq

  1. #1
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut [C#] LINQ to SQL => orderby dynamique (en string)
    Bonjour @ tous,

    Voilà, la question est simple, mais j'ai l'impression que la réponse est compliquée.

    Je remplit une gridView depuis les entités, et j'aimerais pourvoir mettre mon orderby de manière paramétrable... De cette manière, en algorithme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            private void chargerListe(string ordreChamp, string ordreSens) {
                using (connStrEntities bdd = new connStrEntities()) {
                    var req = from M in bdd.tblModules 
                              join S in bdd.tblSites on M.modSitId equals S.sitId
                              join T in bdd.tblTrains on M.modTrnId equals T.trnId
                              select new { M.modId, M.modLib, M.modNomFic, M.modDateMod, M.modEtat, M.modTag, M.modSitId, M.modTrnId, 
                                  S.sitLib, T.trnLib, nbImg=(from L in bdd.tblModDoc where L.mdDocId == M.modId select L).Count() }; // */
                    req.OrderBy(ordreChamp+ " " + ordreSens);
                    gvMain.DataSource = req; // */
                    gvMain.DataBind();
                }
    Mais vous devinez bien que ça ne compile même pas... Le odrerBy prends des paramètres qui me dépassent.

    Pouvez vous m'aider ?

    Merci d'avance.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myOrdreBy= "M.modLib ascending, M.modNomFic ascending"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private void chargerListe(string myOrdreBy) {
                using (connStrEntities bdd = new connStrEntities()) {
                    var req = from M in bdd.tblModules 
                              join S in bdd.tblSites on M.modSitId equals S.sitId
                              join T in bdd.tblTrains on M.modTrnId equals T.trnId
                              orderby myOrdreBy
                              select new { M.modId, M.modLib, M.modNomFic, M.modDateMod, M.modEtat, M.modTag, M.modSitId, M.modTrnId, 
                                  S.sitLib, T.trnLib, nbImg=(from L in bdd.tblModDoc where L.mdDocId == M.modId select L).Count() }; // */
                    gvMain.DataSource = req; // */
                    gvMain.DataBind();
                }

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875

  4. #4
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Fiouf, quelle rapidité...

    Bonjour Benoit,

    C'est ce que j'ai essayé en premier mais non, ça ne fonctionne pas...

    Bonjour tomlev,

    Houlala, c'est démesuré cette librairie... Il me faut inclure la totalité du Zip à mon projet ? Il y a quand même un bon millier de fichiers...
    Je débute en Linq et je doit surement poser des questions à coté, mais ... Il n'y a pas moyen de faire un cast de ma chaine pour que ça colle au paramètres attendus par le orderby() ?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Citation Envoyé par dacid Voir le message
    Fiouf, quelle rapidité...

    Bonjour Benoit,

    C'est ce que j'ai essayé en premier mais non, ça ne fonctionne pas...
    Pourtant je l'ai dans mon code mais avec une simple List<> mais je vois pas ce que ca change

    Ce passe quoi quand tu mets le orderby ?

  6. #6
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    TomLev,

    Bon, j'ai réussi à la mettre en place (j'ai prit le mauvais lien), mais du coup, ce n'est plus du tout du linq...
    Il n'y a pas moyen de faire l'un dans l'autre ?
    Ou alors, comment reproduire ma requête avec les jointures et le Count ?

    Benoit, je suis en Framework 4, c'est p-e pour ça que ça ne fonctionne pas... En fait, il ne se passe rien, il execute la requête mais n'effectue pas le orderBy. Mais je vais retenter malgré tout.
    Peux tu me faire voir ton exemple, STP, des fois ça ne joue à rien.
    Le list par exemple...

    David.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var sortedlist = from donneeAffilie in listDonneeAffilie
                                     orderby string.Join(",", listOrderBy.ToArray())
                                     select donneeAffilie;

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    Il y a une difference entre du linq et du linq to sql?

  9. #9
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Je ne suis pas le mieux placé pour répondre, mais il y a 3 Linq (qui est un terme générrique).
    Linq to XML.
    Linq to Objects
    Linq to SQL.

    Je penses que tu est dans la 2ème catégorie et moi la 3ème...

    David.

  10. #10
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Il y a une difference entre du linq et du linq to sql?
    Linq to SQL doit être traduit en SQL, ce qui impose quelques limitations (ne peut utiliser que des fonctions qui sont traduisibles en sql)

  11. #11
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Je croyait qu'une particularité du C# était de pouvoir appeler des objets par leur "méta" nom, c'est à dire par une chaine qui correspond à leur nom.
    De cette manière, un peu:
    estUnObjet("maClasse").maMethode().

    Je ne sais plus comment ça s'appelle, j'ai lu ç il y a quelque temps.

    Est ce que ce ne serait pas applicable dans ce contexte ?

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par dacid Voir le message
    Houlala, c'est démesuré cette librairie... Il me faut inclure la totalité du Zip à mon projet ? Il y a quand même un bon millier de fichiers...
    Non, il faut juste le fichier DynamicQuery.cs qui est dans LinqSamples\DynamicQuery\DynamicQuery


    Citation Envoyé par dacid Voir le message
    Bon, j'ai réussi à la mettre en place (j'ai prit le mauvais lien), mais du coup, ce n'est plus du tout du linq...
    Euh, c'est à dire ? Qu'est-ce que tu entends par là ?
    Fais voir le code où tu l'utilises

  13. #13
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    TomLev,

    En fait, j'ai vu que je pouvait faire cfonctionner la classe comme dans l'exemple... Seulement , je constate que ce n'est plus du tout du linq.
    Et ma question était:
    Comment, avec cette nouvelle syntaxe, je pouvais reproduire ma requète ci dessus (avec les join est le count).

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par dacid Voir le message
    Seulement , je constate que ce n'est plus du tout du linq.
    OK mais qu'est-ce que tu entends par "ce n'est plus du Linq" ? La méthode OrderBy fournie par Dynamic Linq s'applique à un IQueryable et renvoie un IQueryable, donc clairement ça reste du Linq...

    Il faut juste que tu fasses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    req = req.OrderBy(ordreChamp+ " " + ordreSens);
    (soit presque ce que tu avais écris au départ, sauf qu'il faut affecter le résultat de OrderBy à ta variable

  15. #15
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Citation Envoyé par dacid Voir le message
    Je croyait qu'une particularité du C# était de pouvoir appeler des objets par leur "méta" nom, c'est à dire par une chaine qui correspond à leur nom.
    De cette manière, un peu:
    estUnObjet("maClasse").maMethode().
    Tu parles de Reflection?

  16. #16
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    tomlev,

    Dans ce cas, je ne doit pas avoir réussi à intégrer la librairie, car le orderBy n'a toujours que 3 overLoad dont aucun ne prend une string.
    (j'ai juste glissé DynamicLibrary.cs dans App_Code... Ai-je oublié quelque chose ?)

    Le seul orderBy qui prend une chaine que je vois est implémenté sur l'obje context (bdd dans mon cas).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            private void chargerListe(string ordreChamp, string ordreSens) { // http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx
                using (connStrEntities bdd = new connStrEntities()) {
                    var req = from M in bdd.tblModules 
                              join S in bdd.tblSites on M.modSitId equals S.sitId
                              join T in bdd.tblTrains on M.modTrnId equals T.trnId
                              select new { M.modId, M.modLib, M.modNomFic, M.modDateMod, M.modEtat, M.modTag, M.modSitId, M.modTrnId, 
                                  S.sitLib, T.trnLib, nbImg=(from L in bdd.tblModDoc where L.mdDocId == M.modId select L).Count() }; // */
                    req = req.OrderBy(ordreChamp + " " + ordreSens);
                    gvMain.DataSource = req; // */
                    gvMain.DataBind();
                }
            }
    Dans ce code, toute la ligne OrderBy(); est soulignée en rouge et ne compile donc même pas.


    GuruuMeditation,
    Oui, en effet, c'est bien de réflexion dont je parlais, mais je doute que ça s'applique dans ce contexte...

  17. #17
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 194
    Par défaut
    tu n'as pas oublié d'ajouter le using?

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu as mis un using System.Linq.Dynamic; dans ton code ?

  19. #19
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    J'ai essayé en fait, mais il ne me le propose pas dans la liste.
    Il le colorie en rouge si je le force.

    C'est une appli Web que j'ai et j'ai créé le répertoire App_Code à la main à travers l'interface.
    En fait, je viens de m’apercevoir que, comparé à un autre projet, l'icone du répertoire est gris mais ne possède pas le petit carré dessus. Comment faire pour que l'appli le valide ?
    (en même temps, App_Data n'a pas le petit cylindre et la base dedans est bien détectée...)

  20. #20
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par dacid Voir le message
    C'est une appli Web que j'ai et j'ai créé le répertoire App_Code à la main à travers l'interface.
    En fait, je viens de m’apercevoir que, comparé à un autre projet, l'icone du répertoire est gris mais ne possède pas le petit carré dessus. Comment faire pour que l'appli le valide ?
    (en même temps, App_Data n'a pas le petit cylindre et la base dedans est bien détectée...)
    Euh, alors là j'en sais rien... pour moi le développement web s'apparente à la magie noire

    Vérifie dans les propriétés du fichier si la Build Action (action de génération) est bien "Compile"

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Select dynamique sur PK avec LINQ to SQL
    Par celes dans le forum C#
    Réponses: 0
    Dernier message: 26/10/2012, 14h23
  2. [Linq to SQL] Clause Where dynamique
    Par Kamishu dans le forum Accès aux données
    Réponses: 2
    Dernier message: 14/08/2008, 14h17
  3. [LINQ To SQL] Clauses WHERE dynamiques
    Par SaumonAgile dans le forum Accès aux données
    Réponses: 7
    Dernier message: 23/02/2008, 01h11
  4. Réponses: 5
    Dernier message: 09/08/2005, 17h38
  5. [SQL*Plus] génération dynamique du fichier de spool
    Par lalystar dans le forum Oracle
    Réponses: 3
    Dernier message: 06/12/2004, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo