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 :

type de retour d'une méthode effectuant un select


Sujet :

Linq

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut type de retour d'une méthode effectuant un select
    Bonjour,

    Je souhaiterais connaître le type de retour à attribuer à une méthode effectuant un select avec LINQ.
    Je m'explique.

    J'ai un service WCF qui effectue une requête dans une table nommée TECHNO :
    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
    namespace WcfThierry
    {    
        public class DataTechno : IDataTechno
        {
            public List<quel type choisir ?> getTechno()
            {
                TechnoDataContext dc = new TechnoDataContext();
    
                var allTechno = (from techno in dc.TECHNO orderby techno.LIBELLE_TECHNO select new { techno.ID_TECHNO, techno.LIBELLE_TECHNO });
                return allTechno.ToList();
                
            }        
    
           
        }
    }
    Ceci me retourne une erreur
    impossible de convertir implicitement List<Anonymous Type> en List<TECHNO>
    car le type de retour que je définis pour la méthode getTechno() est faux.

    Pour info, j'ai d'abord mis comme type un "string" puis j'ai crée une structure à 2 élément (un int comme ID_TECHNO et un string comme LIBELLE_TECHNO) mais sans résultat.

    Avez-vous une idée ?
    Merci.
    T.

  2. #2
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Le problème est que tu crées un type anonyme dans ta requête Linq. Il n'est donc normalement pas possible d'utiliser un type anonyme en dehors du "scope" dans lequel il a été créé.

    quand on crée un type anonyme, on doit utiliser le mot clé var.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var result = from ... select new {item1 = ..., item2 = ...};
    Mais tu ne peux pas utiliser var comme type de retour d'une méthode. Le compilateur te l'interdira.

    Une solution serait de créer une classe concrète qui pourrait accueillir les différents éléments dans ton select.

    Si tu veux quand même renvoyer ton type anonyme, j'ai écrit un billet sur mon blog qui explique comment faire.

    http://blog.developpez.com/jerome/p6...yme-en-vale-3/

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut
    Très bon article en effet. Je m'y penche pour conserver un type anonyme.

    Quant à créer une classe concrète pour accueillir les différents éléments dans le select...pourrais-tu me guider ?

    Plus généralement, si je veux que mon select retourne tous les champs de ma table TECHNO (et donc tous les attributs de la classe correspondante créée par LINQ), est-ce que cette classe TECHNO peut être la classe concrète dont tu parles ?

    Merci encore pour ton aide.
    T.

  4. #4
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Citation Envoyé par tiboleo Voir le message
    Très bon article en effet. Je m'y penche pour conserver un type anonyme.

    Quant à créer une classe concrète pour accueillir les différents éléments dans le select...pourrais-tu me guider ?
    Quand je parle de classe concrète, je fais juste allusion à une classe que tu aurais créé toi même. Ainsi tu pourrais avoir quelque chose du genre.

    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
    public class MaTechnoClass
    {
         private int _ID;
         private string _Libelle;
     
         public int ID
         {
            get{return _ID;}
            set{_ID = value;}
         }
     
         public string Libelle
         {
            get{return _Libelle;}
            set{_Libelle = value;}
         }
    }
     
    var allTechno = (from techno in dc.TECHNO orderby techno.LIBELLE_TECHNO select new MaTechnoClass(){ ID = techno.ID_TECHNO, Libelle = techno.LIBELLE_TECHNO });
    Citation Envoyé par tiboleo Voir le message
    Plus généralement, si je veux que mon select retourne tous les champs de ma table TECHNO (et donc tous les attributs de la classe correspondante créée par LINQ), est-ce que cette classe TECHNO peut être la classe concrète dont tu parles ?
    oui, c'est tout à fait possible ! Ca donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var allTechno = (from techno in dc.TECHNO orderby techno.LIBELLE_TECHNO select techno);

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 190
    Par défaut
    Limpide. Merci beaucoup.

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

Discussions similaires

  1. Type incompatible retourné par une méthode
    Par beegees dans le forum Langage
    Réponses: 4
    Dernier message: 22/04/2007, 19h23
  2. Plusieurs retours d'une méthode
    Par yanis97 dans le forum Langage
    Réponses: 10
    Dernier message: 15/11/2006, 17h18
  3. [Oracle 9.1] Types de retour d'une fonction PL/SQL
    Par ftrifiro dans le forum PL/SQL
    Réponses: 8
    Dernier message: 12/10/2005, 16h54
  4. [surcharge]changer le type de reotour d'une méthode
    Par bountykiller dans le forum C++
    Réponses: 3
    Dernier message: 28/09/2005, 11h41
  5. [type de retour dans une proc]
    Par viny dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 19/03/2005, 14h35

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