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 :

Requête SQL sous SQLCompact [Débutant]


Sujet :

Linq

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 12
    Points : 13
    Points
    13
    Par défaut Requête SQL sous SQLCompact
    Re-Bonjour à tous,

    J'ai une base de donnée en SQLCompact(.sdf) qui est correctement configurée et qui fonctionne normalement.

    J'arrive par exemple à récupérer le contenu de ma table "PersonnePhysique" en faisant cette instruction ci :

    var db = new Database1Entities1();
    PersonnePhysique q;
    q = db.PersonnePhysique.Find(1);
    System.Console.WriteLine(q.Nom + " " + q.Prenom);

    C'est un bon début mais j'aimerais maintenant pouvoir récupérer la/les personne(s) dont le prénom est "Jérémy" et pouvoir afficher son/leurs nom(s)
    Jusqu'ici j'ai essayé toute ces fonctions si sans aucun succès :

    var result = db.PersonnePhysique.Where(m => m.Nom == "Jérémy").Select(m => m.Prenom); // (je sais que j'ai mis nom==Jérémy, c'est normal je me suis trompé entre nom et prenom à l'encodage)

    Me renvoie :
    SELECT
    [Extent1].[Prenom] AS [Prenom]
    FROM [PersonnePhysique] AS [Extent1]
    WHERE N'Jérémy' = [Extent1].[Nom]

    J'ai également essayé la fonction .SqlQuery :

    string result = db.PersonnePhysique.SqlQuery<string>("Select Prenom where nom = Jérémy");

    Mais la j'ai droit à l'erreur de compilation suivante :

    La méthode 'System.data.entity.DbSet<TFEv2.Model.PErsonnePhysique>.SqlQuery(string, params object[])' non générique ne peut pas être utilisé avec des arguments de type

    Et oui la phrase s'arrête la, donc je ne comprends absolument pas ce que je dois faire pour pouvoir faire une vrai requête sql
    Toute aide sera la bienvenue

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Alors pour la fonction "SqlQuery" c'est très simple, tu as oublié les quotes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string result = db.PersonnePhysique.SqlQuery<string>("Select Prenom where nom = 'Jérémy'");
    Mais dans ta requête Linq au dessus, je n'ai pas compris quelle est l'anomalie... ??? ça te renvoie la requête composée elle-même???

  3. #3
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Ta demande n'est pas totalement clair.
    Et utilise les balises "code" [#] pour mettre ton code !

    Sinon pour décomposer ta requete linq :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var result = db.PersonnePhysique.Where(m => m.Nom == "Jérémy").Select(m => m.Prenom);
    La requête généré est correcte :
    - db.PersonnePhysique --> FROM [PersonnePhysique] AS [Extent1]
    - .Where(m => m.Nom == "Jérémy") --> WHERE N'Jérémy' = [Extent1].[Nom]
    - .Select(m => m.Prenom) --> SELECT [Extent1].[Prenom] AS [Prenom]
    Avec le Select tu lui demande de te ramener que les prénoms, le résultat est donc une List<string> (de Prénoms).

    Pour ramener les "PersonnePhysique" qui s'apelle "Jérémy" il suffit d'enlever le Select !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var result = db.PersonnePhysique.Where(m => m.Nom == "Jérémy")
    Ici tu aura une une List<PersonnePhysique>.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par katkiller Voir le message
    Pour ramener les "PersonnePhysique" qui s'apelle "Jérémy" il suffit d'enlever le Select !
    Ah oui, c'est tout à fait ça en fait, sinon il avait un seulement les noms.

    Citation Envoyé par katkiller Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var result = db.PersonnePhysique.Where(m => m.Nom == "Jérémy")
    Ici tu aura une une List<PersonnePhysique>.
    Pas tout à fait, ici c'est un "IQueryable<PersonnePhysique>". Pour avoir une "List<PersonnePhysique>", il faut rajouter ".ToList()" à la fin.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2013
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static void test()
            {
                var db = new Database1Entities1();
                string result = db.PersonnePhysique.SqlQuery<string>("Select Prenom where nom = 'Jérémy'");
                System.Console.WriteLine(result);
            }
    Mon but est de récupérer un string. Mais la j'ai toujours le fameux message d'erreur :

    La méthode 'System.Data.Entity.DbSet<TFEv2.Model.PErsonnePhysique>.SqlQuery(string,params object[])' non générique ne peut pas être utilisé avec des arguments de type
    Et pour la première commande avec le fonctions lambda, je reçoit un retour un string contenant ma requête, j'aimerais recevoir simplement le string contenant le nom associé à ma recherche.

    J'espère avoir été plus clair ce coup-ci

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Nedje Voir le message
    Et pour la première commande avec le fonctions lambda, je reçoit un retour un string contenant ma requête, j'aimerais recevoir simplement le string contenant le nom associé à ma recherche.
    Ah oui, c'est bien ce que j'avais compris. C'est très étonnant ça. Normalement avec la requête Linq que tu nous as montré, ça renvoie un objet de type "IQueryable<string>"... et pour obtenir ta liste, tu mets un "ToList" devant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var result = db.PersonnePhysique.Where(m => m.Nom == "Jérémy").Select(m => m.Prenom).ToList();
    Là on a un List<string>. Mais si tu veux la personne avec toutes ses propriétés, tu fais comme l'a montré Cedric, mais avec un "ToList" à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var result = db.PersonnePhysique.Where(m => m.Nom == "Jérémy").ToList();
    Après pour la méthode "SqlQuery" c'est très probablement un problème de cast. Remplace le "string result" par un "var result" et regarde qu'Est-ce qu'il renvoie comme type...
    Dernière modification par Invité ; 14/02/2014 à 09h28.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Sinon, pour récupérer juste le premier directement dans une chaîne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string result = db.PersonnePhysique.Where(m => m.Nom == "Jérémy").Select(m => m.Prenom).FirstOrDefault();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête SQL sous VBA - Between
    Par p'tite Sandrine dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/08/2012, 20h24
  2. limitation de caractére dans une requête SQL sous Acces
    Par amka dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 18/08/2006, 15h15
  3. Réponses: 8
    Dernier message: 11/08/2006, 09h30
  4. requête sql sous access
    Par jadey dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/08/2006, 21h20
  5. affichage requête sql sous phppgadmin
    Par kerzut dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 25/02/2005, 12h39

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