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

Entity Framework Discussion :

Selectionner dans une liste quelques attributs d'une entité avec LINQ


Sujet :

Entity Framework

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut Selectionner dans une liste quelques attributs d'une entité avec LINQ
    Bonjour à Tous,
    J'écris une procédure afin de pourvoir sélectionner quelques attributs de mon entité Agents{AgentMatriclue,... Login, MotDePasse...}. Je voudrais retourner au travers d'une requête le Login et le MotDePasse d'un agent en passant en paramètre le Matricule de celui-ci. Pour ce faire, j'ai écris cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public List< Agent> GetLoginAgent(string aAgentMatricule)
            {
     
                return (from oAgent in ContexteDAO.ContexteDonnees.Agents where oAgent.AgentMatricule == aAgentMatricule
                             select  new {oAgent.Login,oAgent.MotDePasse});
     
     
            }
    Lorsque que je l'écris, j'ai ce message d'erreur qui s'affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur	1	Impossible de convertir implicitement le type 'System.Linq.IQueryable<AnonymousType#1>' en 'System.Collections.Generic.List<EnrePaxDAO.Agent>'. Une conversion explicite existe (un cast est-il manquant ?)	D:\WebSites\Enre_Pax\EnrePaxDAO\EnrePaxDAO\MesClasses\Agent.cs	149	26	EnrePaxDAO
    Je n'arrive pas à corriger l'erreur. Merci de m'aider.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  2. #2
    Membre expérimenté Avatar de dfiad77pro
    Homme Profil pro
    Responsable Architecture logicielle
    Inscrit en
    Décembre 2008
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Architecture logicielle
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 541
    Points : 1 729
    Points
    1 729
    Par défaut
    C'est normal, car ton type qui sélectionne 2 colonnes doit être redéfinis dans un objet à coté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class AgentReduit{
     
     string Login {get; set;}
    string MotDePasse{get; set;}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public List< AgentReduit> GetLoginAgent(string aAgentMatricule)
            {
     
    return (from oAgent in ContexteDAO.ContexteDonnees.Agents 
    where oAgent.AgentMatricule == aAgentMatricule
     select  new AgentReduit(){
    Login =oAgent.Login,
    MotDePasse=oAgent.MotDePasse}
    ).ToList();
     
     
            }

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    J'ai éssayé votre méthode en définissant la nouvelle classe "Agentreduit" dans la même Classe, j'ai 1 message d'erreur:
    - message 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur	1	Impossible d'initialiser un type 'EnrePaxDAO.Agent.AgentLogin' avec un initialiseur de collection, car il n'implémente pas 'System.Collections.IEnumerable'	D:\WebSites\Enre_Pax\EnrePaxDAO\EnrePaxDAO\MesClasses\Agent.cs	156	51	EnrePaxDAO
    . Ce qui m'amène à me demander où dois exactement définir l'objet réduit? Quelles autres transformations dois je faire?
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  4. #4
    Membre expérimenté Avatar de dfiad77pro
    Homme Profil pro
    Responsable Architecture logicielle
    Inscrit en
    Décembre 2008
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Architecture logicielle
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 541
    Points : 1 729
    Points
    1 729
    Par défaut
    Perso je défini la classe dans une nouvelle classe.

    j'ai écrit le code sans tester , y'a peut être une autre erreur dedans mais le principe est celui la.

    - A tu définit la classe avec le même typage que l'entité ( nullable compris)
    - normalement y'a pas besoin d'implémenter IEnumerable ...



    je viens de tester ça marche

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Full-stack
    Inscrit en
    Novembre 2010
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Full-stack

    Informations forums :
    Inscription : Novembre 2010
    Messages : 372
    Points : 489
    Points
    489
    Par défaut
    J'ai finalement pu avoir une solution sans faire une autre classe AgentReduit, la voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    return (from oAgent in ContexteDAO.ContexteDonnees.Agents where oAgent.AgentMatricule == aAgentMatricule
                             select  new Agent {Login=oAgent.Login,MotDePasse= oAgent.MotDePasse}).ToList();
    . Merci pour ta contribution.
    La recherche de la connaissance est une Lumière qui apaise le Cœur.
    Si une réponse vous a été utile , n'oubliez pas de voter en cliquant sur:.

  6. #6
    Membre expérimenté Avatar de dfiad77pro
    Homme Profil pro
    Responsable Architecture logicielle
    Inscrit en
    Décembre 2008
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable Architecture logicielle
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 541
    Points : 1 729
    Points
    1 729
    Par défaut
    Citation Envoyé par Alexandre le Grand Voir le message
    J'ai finalement pu avoir une solution sans faire une autre classe AgentReduit, la voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    return (from oAgent in ContexteDAO.ContexteDonnees.Agents where oAgent.AgentMatricule == aAgentMatricule
                             select  new Agent {Login=oAgent.Login,MotDePasse= oAgent.MotDePasse}).ToList();
    . Merci pour ta contribution.
    Solution plus simple mais présentant le risque de moins différencier les vrais agents de ceux amputés de leurs attributs

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

Discussions similaires

  1. [LibreOffice][Base de données] Recuperer une liste de tables et une liste de champs d'une table sur LibreOffice & OpenOffice
    Par gerard.sauvage dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 08/04/2014, 12h35
  2. affectation d'une valeur à l'attribut d'une liste
    Par cybermat3 dans le forum JSF
    Réponses: 1
    Dernier message: 16/03/2009, 08h54
  3. Réponses: 2
    Dernier message: 29/05/2008, 15h59
  4. Réponses: 2
    Dernier message: 26/05/2007, 17h28
  5. [Debutant]Remplacer une liste de valeur par une liste de val
    Par Sebbo dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 31/03/2006, 12h15

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