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

Framework .NET Discussion :

Entity Framework et les requêtes d'action aux données


Sujet :

Framework .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut Entity Framework et les requêtes d'action aux données
    Bonjour,

    Je commence gentillement à me faire la main sur Entity Framework. J'ai regardé le tutoriel d'introduction de developpez.com, mais je n'ai pas trouvé de précision pour la création de requête.

    Par exemple, dans la requête suivante j'aimerais bien récupérer tout les objet de type tbl_method de mon modèle objet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public IQueryable<ISMS.Models.tbl_method> GetMethod(int id)
            {
                return from method in db.tbl_method
                       where method.met_id = id
                       orderby method.met_name
                       select method;
            }
    le method de "from method" doit être un nom que l'on donne nous-même je suppose?

    Ensuite, dans la clause where, au départ j'ai essayé de mettre tbl_method.met_id (qui est ma table que j'interroge dans le modèle objet) mais cela ne marchait pas. Ensuite en essayant avec method (ma variable donc), cela à marché. Par contre, pas d'intellisense pour ça, est-ce normal?

    Le select, devrait me retourner normalement ma table tbl_method, or si je mets "select tbl_method" à la place de "select method" ça ne marche pas. Pourquoi?

    Merci d'avance pour vos éclaircissement

    L.

  2. #2
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    La variable après le from, dans le cas présent 'method' est effectivement nommé par le développeur. Elle représente un objet contenu dans le conteneur indiqué après le in, c'est à dire 'db.tbl_method' dans ce cas.
    C'est à dire que method va représenter une ligne de ta table.

    Ensuite, dans le Where, tu va poser les conditions sur ta ligne, si telle propriété est égal à ceci, je garde la ligne. Faire une condition sur la table n'aurait pas d'intérêt vu qu'elle est le conteneur dans le cas présent. Par contre tu aurais dû avoir l'intellisense normalement...

    Et c'est la même chose pour le select, tu ne peux pas retourner ta table, vu que c'est elle que tu interroge, tu va donc retourner les lignes concernées.

    Donc là, si j'ai bien compris, il faudrait que tu change le conteneur de données.
    Tu cherche à retourner les tables directement ?
    ça me paraît un brin bizarre, je ne dois pas comprendre ce que tu veux faire exactement.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    en faite, je veux simplement récupérer une liste des noms (le champ exacte est tbl_method.met_name) de méthode de ma table tbl_method.

    En ce qui concerne le conteneur de données, que veux tu dire exactement? Tu veux parler de method ou tbl_method?

  4. #4
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Pour le conteneur de données, je parle de tbl_method, qui est la table qui contient les données que tu veux récupérer.

    Pour ta requête, si tu veux simplement le nom, tu peux modifier ta requête comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public List<String> GetMethod(int id)
    {
        return (from method in db.tbl_method
                 where method.met_id = id
                 orderby method.met_name
                 select method.met_name)ToList<String>();
    }
    N'ayant pas de quoi tester sous la main, je ne donne pas de garantie, mais tu as au moins un exemple

    Vu que tu ne veux que les noms, j'ai modifié le type de retour en liste de String, qui correspond mieux à ce que tu attend. Pour cela, il suffit d'appeler la méthode ToList sur le IQueryable retourné par la requête LINQ.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  5. #5
    Membre éclairé
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Par défaut
    Merci.

    C'est effectivement plus propre d'avoir une liste sous forme de string.

    Par contre, ma vue n'accepte que des types du type de ma table (tbl_method), donc pour lui passer l'objet (et pas seulement le nom, sinon j'ai une erreur), j'ai fais la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static Models.tbl_method GetMethod(int id)
            {
                return (from method in db.tbl_method
                       where method.met_id == id
                       orderby method.met_name
                       select method).FirstOrDefault();
            }
    Pour ensuite l'envoyer dans ma vue, qui elle ensuite récupère les données nécessaires. Avant j'avais une erreur de ce type, ce qui m'a fait pencher un petit moment sur le problème ^^

  6. #6
    Membre Expert
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Par défaut
    Effectivement c'est mieux

    Par contre, vu que tu n'en récupère qu'une de toute façon, tu peux enlever la clause OrderBy qui ne sert à rien.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

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

Discussions similaires

  1. [Débutant] Entity Framework et les champs de valeur null
    Par wstboss71 dans le forum C#
    Réponses: 0
    Dernier message: 26/10/2011, 10h34
  2. Réponses: 2
    Dernier message: 29/10/2007, 16h16
  3. [Débat] Utilisez vous les Pages d'Accès aux Données?
    Par mout1234 dans le forum Sondages et Débats
    Réponses: 7
    Dernier message: 27/12/2006, 19h19
  4. Réponses: 2
    Dernier message: 22/06/2006, 11h03

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