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 :

Conversion requête SQL en LINQ


Sujet :

Linq

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut Conversion requête SQL en LINQ
    Bonjour,

    voilà je n'arrive à convertir une requête SQL sur une table en une requête LINQ sur une collection d'objet :

    Voilà ma requête SqL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT
    count(*) AS "NbCptr",
    sum(CASE WHEN STATUT IN ('WB', 'LU', 'NA') THEN 1 ELSE 0 END) AS "NbRel",
    sum(CASE WHEN STATUT IN ('AV', 'AF') THEN 1 ELSE 0 END) AS "NbAbs",
    sum(CASE WHEN TYPE_EQUIPT_CPTR <> 'N' THEN 1 ELSE 0 END) AS "NbRR"
    FROM Folio
    GROUP BY LIB_COMMUNE
    J'aimerai faire la même requête en LINQ (c#) sur une collection.

    mErci de votre aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Par défaut
    Effectivement c'est une requete assez spéciale,

    Je dirai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var query = from f in Folio group f by f.LIB_COMMUNE;
    var NbCptr = query.Count();
    var NbRel = query.Count(f => (new String[] { "WB", "LU", "NA" }).Contains(f.Statut));
    var NbAbs = query.Count(f => (new String[] { "AV", "AF" }).Contains(f.Statut));
    var NbRR = query.Count(f => f.TYPE_EQUIPT_CPTR != "n");

    Cdt,
    Kevin D.

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    merci de ta réponse,

    le problème étant que dans ma requete SQL, j'obtenais, par LIB_COMMUNE une serie de renseignements...

    Or de ce que tu ecris, je récupère bien la liste des LIB_COMMUNE mais apres, tu fais la somme de toutes les lignes, or moi je voudrai les infos par commune

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    Dans l'idée, je dirais que Entity SQL serait plus à même de ce que tu veux faire. Mais comme je ne l'ai jamais manipulé, je dis ça sans garantie xD

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var res = f.CreateQuery<Object>(requeteSQL);
    foreach(var elem in res)
    {
      Console.WriteLine(elem.NbCptr);
    }
    Je ne sais pas si ESQL permet de récupérer de telles valeurs, à tester

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Somme (Picardie)

    Informations forums :
    Inscription : Avril 2009
    Messages : 55
    Par défaut
    Si je ne me trompe, ma requête fait ce que tu demande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // on groupe les données en fonction de la propriété LIB_COMMUNE
    var query = from f in Folio group f by f.LIB_COMMUNE;
     
    // on compte le nombre de groupe créé
    var NbCptr = query.Count();
     
    // on compte le nombre de groupe créé dont la propriété Statut est égale à WB, LU ou NA
    var NbRel = query.Count(f => (new String[] { "WB", "LU", "NA" }).Contains(f.Statut));
     
    // on compte le nombre de groupe créé dont la propriété Statut est égale à AV ou AF
    var NbAbs = query.Count(f => (new String[] { "AV", "AF" }).Contains(f.Statut));
     
    // on compte le nombre de groupe créé dont la propriété TYPE_EQUIPT_CPTR est différente de n
    var NbRR = query.Count(f => f.TYPE_EQUIPT_CPTR != "n");
    Selon moi, c'est ce que fait ta requête SQL.
    Sinon, as-tu un exemple de donnée en base et de données récupérées par la requête ?

    Cdt,
    Kevin D.

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    petit exemple :

    J'ai une table
    Compteur (NumCptr, Rue, Commune, Index)

    J'aimerai, avoir par rue le nombre de compteur, le nombre de compteurs relevés (colonne index non null) et le nombre de compteurs non relevés.

    1 'rue 1' 'Commune1' 123
    2 'rue 1' 'Commune1' null
    3 'rue 2' 'Commune1' 12
    4 'rue 1' 'Commune2' null
    5 'rue 1' 'Commune2' 1254
    6 'rue 1' 'Commune2' 1


    Ma requete me renverrai :
    (rue, Commune, Nb Compteurs, nb Cptr Relevés, nb Cptr non Relevés)

    'rue 1' 'Commune1' 2 1 1
    'rue 2' 'Commune1' 1 1 0
    'rue 1' 'Commune2' 3 2 1

    voilà ce que me renvoi ma requete SQL, j'aimerai avoir le même résultat mais avec une requête LINQ

    Merci

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Par défaut
    Alors petites précisions pour être plus clair.

    Au début j'ai une table SQL Serveur Compact dans laquelle je fait ma requête SQL (voir premier post)

    Maintenant au lieu d'avoir une table j'ai une Liste d'objets qui reperésente ma table et dans cette liste je voudrais executer la même reqûête (donc avoir le même résultat) mais avec LINQ, avec l'aide du post de kevi, voilà ce que j'ai réussi à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    // -- Récupère les couples Rue/Commune
    // --------------------------------------
    var adr = (from f in this._ListeFolios
                               select new { Rue = f.Rue, Commune = f.Commune}).Distinct().ToList();
     
                    // -- Liste contenant mon resultat final
                    // -------------------------------------
                    this._BilanGeneral = new BilanWBCollection();
                    for (int i = 0; i < adr.Count(); i++)
                    {
                        string commune = adr[i].Commune;
                        string rue = adr[i].Rue;
     
                        var query = from f in this._ListeFolios 
                                    where f.Commune == commune && f.Rue == rue
                                    select f;
     
                        BilanWB bilan = new BilanWB();
                        bilan.Commune = commune;
                        bilan.Rue = rue;
                        bilan.Cptr = query.Count();
                        bilan.Rel = query.Count(f => (new String[] { "WB", "LU", "NA" }).Contains(f.Statut));
                        bilan.Abs = bilan.Cptr - bilan.Rel;
                        bilan.RR = query.Count(f => f.Type_Equipt_Cptr != "N");
     
                        this._BilanGeneral.Add(bilan);
                    }
    qu'en pensez vous ? je débute avec LINQ sonc je ne sais pas s'il y ds choses à ne pas faire que j'aurais faites !!!

    merci de votre aide

Discussions similaires

  1. Traduction requête SQL en Linq (Avec EF4)
    Par julien_fauquereau dans le forum Linq
    Réponses: 7
    Dernier message: 19/07/2011, 14h58
  2. Traduire une requête SQL en LINQ
    Par julien_fauquereau dans le forum Linq
    Réponses: 13
    Dernier message: 08/07/2011, 09h50
  3. Traduire cette requête SQL en Linq to entities.
    Par Reminouche dans le forum Linq
    Réponses: 3
    Dernier message: 30/05/2011, 21h14
  4. programe conversion requête sql SQL-Server en Oracle
    Par grav dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 26/04/2006, 17h36
  5. Réponses: 4
    Dernier message: 26/04/2006, 17h08

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