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 :

[Linq to Entities] Comment retourner le résultat d'une requête dans une méthode?


Sujet :

Framework .NET

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Par défaut [Linq to Entities] Comment retourner le résultat d'une requête dans une méthode?
    bonjour à tous,
    j'ai commencé à travailler avec linq to entities et j'ai rencontré ce problème.
    je n'arrive pas à retourner le résultat d'une requête dans une méthode, même si j'ai créé une classe dans laquelle j'instancie le résultat (chaque row de table ) et que je mets dans un iqueryable, mais ca marche pas, et pour cause, ce n'est pas possible d'instantier une class paramétrable dans Linq to
    Entities, ( c'est le forum de ADO linq qui en parle )

    " Exception : Only parameterless constructors and initializers are supported in LINQ to Entities "


    quelqu'un aurait il rencontré le meme problème ?

    merci d'avance pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
         public IQueryable<DAO.TableMapping.Logiciel> listLogiciel()
            {
     
                GestionArchiveEntities entite = new GestionArchiveEntities();
                ObjectQuery<Logiciels> logiciels = entite.Logiciel;
                IQueryable<DAO.TableMapping.Logiciel> query = from p in logiciels
     
                            select new DAO.TableMapping.Logiciel ( p.titre, 1, p.verssion, p.description, p.date.Value, p.chemin );
     
               return  query;
            }

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    peut etre comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
         public IQueryable<DAO.TableMapping.Logiciel> listLogiciel()
            {
     
                GestionArchiveEntities entite = new GestionArchiveEntities();
                ObjectQuery<Logiciels> logiciels = entite.Logiciel;
                IQueryable<DAO.TableMapping.Logiciel> query = from p in logiciels
     
                            select new { p.titre, 1, p.verssion, p.description, p.date.Value, p.chemin };
              /// y a du code a faire ici
               return  query;
            }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
         public IQueryable<DAO.TableMapping.Logiciel> listLogiciel()
            {
     
                GestionArchiveEntities entite = new GestionArchiveEntities();
                ObjectQuery<Logiciels> logiciels = entite.Logiciel;
                IQueryable<DAO.TableMapping.Logiciel> query = from p in logiciels
     
                            select p;
     
               return  query;
            }
    Je ne pense pas que ce soit une tres bonne idée de revoyer des IQueryable dans ce genre d'archi...

  3. #3
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Par défaut
    Citation Envoyé par anthyme Voir le message
    Je ne pense pas que ce soit une tres bonne idée de revoyer des IQueryable dans ce genre d'archi...
    +1 un petit IEnumerable<T> serais préférable

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Par défaut en réponses à vos réactions
    en fait j'ai oublié de mentionné que j'ai pas envie d'afficher tous les champs de la ligne, car le linq to entity ajoute trois ou 4 fields que j'ai pas envie de binder à mon datagrid, j'aimerais selectionner uniquement les champs dont j'ai besoin.

    j'ai fais plusieurs recherches sur le net disant qu'il était pas possible d'instantier une class dans une requête linq et ainsi de binder le résultat dans la class a chaque fois

    j'espère que quelqu'un a déjà rencontré le même problème que le miens.

    si je fais un select p, ca selectionne toute la ligne, c'est pour ca que j'ai fais un select new pour justement filtrer uniquement les field dont j'ai besoin.

    meci de votre attention.

  5. #5
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    bin tu peux utiliser ma première requête puis encapsuler le résultat dans des objets

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Par défaut y'a t il moyen de faire mieux ?
    je voudrais savoir s'il est possible de faire mieux, car je suis pas vraiment convaincu par ma méthode.

    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
      public List<DAO.TableMapping.Logiciel> listLogiciel()
            {
     
                GestionArchiveEntities entite = new GestionArchiveEntities();
                ObjectQuery<Logiciels> logiciels = entite.Logiciel;
                List<DAO.TableMapping.Logiciel> objects = new List<DAO.TableMapping.Logiciel>();
     
                var query = from p in entite.Logiciel
     
                            select new {p.id, p.titre,p.Categorie.nom, p.verssion, p.description, p.chemin };
                foreach (var q in query)
                    objects.Add(new DAO.TableMapping.Logiciel(q.id, q.titre, q.verssion, q.nom, q.description, q.chemin));
     
     
                return objects;
            }

  7. #7
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Tu as essayé ca, tout simplement (a tester mais cela devrait marcher):

    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
    public List<DAO.TableMapping.Logiciel> listLogiciel()
            {
     
                GestionArchiveEntities entite = new GestionArchiveEntities();
                ObjectQuery<Logiciels> logiciels = entite.Logiciel;
                List<DAO.TableMapping.Logiciel> objects = new List<DAO.TableMapping.Logiciel>();
     
                var query = from p in entite.Logiciel
     
                            select new DAO.TableMapping.Logiciel(q.id, q.titre, q.verssion, q.nom, q.description, q.chemin);
     
               objects.AddRange(query.ToList());
     
                return objects;
            }

  8. #8
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public List<DAO.TableMapping.Logiciel> listLogiciel()
            {
     
                GestionArchiveEntities entite = new GestionArchiveEntities();
                var query = from p in entite.Logiciel
     
                            select new {q.id, q.titre, q.verssion, q.nom, q.description, q.chemin};
     
                return query.ToList();
            }

  9. #9
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    Citation Envoyé par davcha Voir le message
    plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public List<DAO.TableMapping.Logiciel> listLogiciel()
            {
     
                GestionArchiveEntities entite = new GestionArchiveEntities();
                var query = from p in entite.Logiciel
     
                            select new {q.id, q.titre, q.verssion, q.nom, q.description, q.chemin};
     
                return query.ToList();
            }
    Euhhh comment ça pourrait marcher ça ???

  10. #10
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 273
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 273
    Par défaut
    Peut êtrz aussi que tu perdras moins de temps à prendre ton objet et à travailler la vue...

    Entre afficher ou pas une colonne

    et

    Resoudre des types anonymes, binder des types anonymes, sans compter que derriére ton objet n'a pas de contexte

    Ca fait beaucoup de contraintes pour juste un problème d'affichage.

  11. #11
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Citation Envoyé par anthyme Voir le message
    Euhhh comment ça pourrait marcher ça ???
    changer les q pour des p. je m'étais basé sur le post de Thomas, mais il a fait la même erreur, apparemment.

  12. #12
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    hummm c'est pas ca qui me choc moi ...

    la méthode renvoie des objets DAO.TableMapping.Logiciel mais on fait un select d'objets anonymes ...

    Par quel "magie" les objets anonymes se transforme en DAO.TableMapping.Logiciel ?

  13. #13
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    ah oui, tiens, j'avais pas vu.

    Suffit d'ajouter la classe après le new.

    Me semble qu'EF gère memberinit

  14. #14
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Euh, par hasard, ce ne serait pas ça que vous voulez faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public IEnumerable<DAO.TableMapping.Logiciel> listLogiciel()
            {
     
                GestionArchiveEntities entite = new GestionArchiveEntities();
     
                var query = from p in entite.Logiciel
     
                            select new Logiciel { Id = p.id, Titre = p.titre, Categorie = p.Categorie.nom, Version = p.verssion, Description = p.description, Chemin p.chemin };
     
                return query;
            }
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  15. #15
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    Citation Envoyé par davcha Voir le message
    ah oui, tiens, j'avais pas vu.

    Suffit d'ajouter la classe après le new.

    Me semble qu'EF gère memberinit
    Ok je suis donc pas encore fou ! (ou a la bour !)

Discussions similaires

  1. Résultat d'un champ d'une requête dans une variable
    Par PsychedeChed dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/01/2009, 13h50
  2. Réponses: 4
    Dernier message: 02/07/2008, 12h32
  3. Réponses: 2
    Dernier message: 02/06/2006, 12h26
  4. Réponses: 4
    Dernier message: 01/12/2005, 15h36
  5. Réponses: 4
    Dernier message: 14/09/2005, 18h23

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