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 :

Retourner un "select new"


Sujet :

Entity Framework

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 48
    Points : 36
    Points
    36
    Par défaut Retourner un "select new"
    Bonjour,

    J'ai utilisé le modèle de developpement repository asp.net C#
    J'ai besoin de retourner le resultat d'une requete linq ou j'ai fait un "select new"
    Mais je coince au niveau de la valeur et du type de retour.
    Voici mon code

    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
     
    public IEnumerable<Demande> RecupererDemande(int Id_Demande)
            {
     
                var query = (from lademande in _entities.tbl_Demande
                        join ledemandeur in _entities.tbl_Demandeur on lademande.id_demandeur equals ledemandeur.id_demandeur
                        join lesversements in _entities.tbl_Versements on lademande.id_demande equals lesversements.id_demande
                        where lademande.id_demande == Id_Demande
                        select new 
                            {
                                Id_Demande = lademande.id_demande,
                                Duree_Demande = lademande.duree_demande,
                                Date_Demande = lademande.date_demande,
                                Numero_demande = lademande.numero_demande,
                                Id_Demandeur = ledemandeur.id_demandeur,
                                Nom_Demandeur = ledemandeur.nom_demandeur,
                                Prenom_Demandeur = ledemandeur.prenom_demandeur
                            }
                         );
                return query.ToList();
            }
    Quel type de retour dois-je utiliser et comment faire le retour?

    Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Le retour doit être de type IEnumerable<Demande> alors que toi tu retournes une liste générique de type anonyme. ça ne marchera pas.
    Il faut que tu crées une instance de la classe Demande avec la clause select donc faire select new Demande { /* bla bla */ }.

  3. #3
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Cela s'appelle un type anonyme.
    Si tu veux retourner un IEnumerable<Demande>, il faut que tu le convertisse.
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 48
    Points : 36
    Points
    36
    Par défaut
    D'accord je vais essayer cela et je vous reviens

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 48
    Points : 36
    Points
    36
    Par défaut
    Tous les alias sont soulignés en rouge avec le message d'erreur suivant :
    Context.Model.Demande ne contient pas de définition pour Id_Demande
    (la même chose pour tous les alias)
    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
     
            public IEnumerable<Demande> RecupererDemande(int Id_Demande)
            {
     
                var query = (from lademande in _entities.tbl_Demande
                             join ledemandeur in _entities.tbl_Demandeur on lademande.id_demandeur equals ledemandeur.id_demandeur
                             join lesversements in _entities.tbl_Versements on lademande.id_demande equals lesversements.id_demande
                             where lademande.id_demande == Id_Demande
                             select new Demande
                            {
                                Id_Demande = lademande.id_demande,
                                Duree_Demande = lademande.duree_demande,
                                Date_Demande = lademande.date_demande,
                                Numero_demande = lademande.numero_demande,
                                Id_Demandeur = ledemandeur.id_demandeur,
                                Nom_Demandeur = ledemandeur.nom_demandeur,
                                Prenom_Demandeur = ledemandeur.prenom_demandeur
                            }
                         );
                return query.ToList();
            }

  6. #6
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Il faut procéder comme suit :

    Code C# : 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
    29
    30
    31
     
    var query = (from lademande in _entities.tbl_Demande
                        join ledemandeur in _entities.tbl_Demandeur on lademande.id_demandeur equals ledemandeur.id_demandeur
                        join lesversements in _entities.tbl_Versements on lademande.id_demande equals lesversements.id_demande
                        where lademande.id_demande == Id_Demande
                        select new 
                            {
                                Id_Demande = lademande.id_demande,
                                Duree_Demande = lademande.duree_demande,
                                Date_Demande = lademande.date_demande,
                                Numero_demande = lademande.numero_demande,
                                Id_Demandeur = ledemandeur.id_demandeur,
                                Nom_Demandeur = ledemandeur.nom_demandeur,
                                Prenom_Demandeur = ledemandeur.prenom_demandeur
                            }
                         );
     
    var listeDemande = new List<Demande>();
    foreach(var d in query.ToList()) {
         listeDemande.Add(new Demande{
                 Id_Demande = d.id_demande,
                 Duree_Demande = d.duree_demande,
                 Date_Demande = d.date_demande,
                 Numero_demande = d.numero_demande,
                 Id_Demandeur = d.id_demandeur,
                 Nom_Demandeur = d.nom_demandeur,
                 Prenom_Demandeur = d.prenom_demandeur
         });
    } 
     
    return listeDemande;

    Je l'ai fait sans VS, donc j'ai peut-être mis des erreurs de syntaxe...
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  7. #7
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 48
    Points : 36
    Points
    36
    Par défaut
    J'ai le meme message d'erreur
    Context.Model.Demande ne contient pas de définition pour Id_Demande
    (la même chose pour tous les alias)

    En c'est parce que j'utilise des champs de la table "demandeur". De ce fait, ces champs ne sont pas défini dans la table "demande"

  8. #8
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Ok, mais ça c'est parce que je connais pas le constructeur de "Demande"... xD
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ambe_fr Voir le message
    J'ai le meme message d'erreur
    Context.Model.Demande ne contient pas de définition pour Id_Demande
    La classe Context.Model.Demande ne contient pas de propriété du nom de Id_Demande. Vérifie que tu ne t'es pas trompé sur l'orthographe de cette propriété.

Discussions similaires

  1. [Hibernate] Utilisation de select new
    Par speedster dans le forum Hibernate
    Réponses: 2
    Dernier message: 10/09/2005, 16h41

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