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 :

Impossible de convertir implicitement le type 'System.Collections.Generic.List<<anonymous type: [Débutant]


Sujet :

Entity Framework

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Points : 33
    Points
    33
    Par défaut Impossible de convertir implicitement le type 'System.Collections.Generic.List<<anonymous type:
    Bonjour,

    Je débute avec Entity Framework, et je bute sur un problème qui doit être simple mais ne comprend pas.

    J'appelle une méthode de ma classe DAL qui devrait me retourner une liste des groupes dans le quel l'utilisateur pourrait appartenir.

    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
     
    public List<Admin_UsersGroups> AdminUserProfile(int Id)
     
            {
                using (var context = new MDAOfficeEntities())
                {
                    return context.Admin_UsersGroups
                        .Where(i => i.Id == Id)
                        .Select(a => new
                        {
                            Name = a.Admin_Users.DisplayName,
                            Groupe = a.Admin_Groups.GroupeName,
                            Permission = a.AccessRight
                        })
                        .ToList();
     
                }
            }
    Le problème c'est que j'ai un joli message qui me dit :

    Erreur CS0029 Impossible de convertir implicitement le type 'System.Collections.Generic.List<<anonymous type: string Name, string Groupe, string Permission>>' en 'System.Collections.Generic.List<MDA.Office.DAL.Admin_UsersGroups>' MDA.Office.DAL U:\ProjectVS\MDAEntityDevTest\MDA.Office.DAL\Admin\MDAUsers.cs 37 Actif


    Quelqu'un pourrait m'aider ?

    d'avance merci :-)

    Alex

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Le problème est ton select. Tu crées un nouvel objet, de type anonyme. Ta fonction est censé renvoyer une liste de Admin_UsersGroups.

    Ici, le select est tout simplement inutile. Tu peux le supprimer et appeler directement ToList après le Where.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Merci pour l'info, mais je bloque quand même. J'aimerai pouvoir récupérer récupérer 3 champs, cela fonctionne pour 1 seul, le seul qui se trouve dans la table "Admin_UsersGroups"

    Voici mon EDMX :

    Nom : emdx.png
Affichages : 4202
Taille : 27,6 Ko

    J'aimerai pouvoir afficher donc :

    DisplayName (Table Admin_Users)
    AccessRight (celui là fonctionne et vient de la table Admin_UsersGroups)
    GroupeName (Table Admin_Groups)

    J'ai donc modifié ma méthode comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public List<Admin_UsersGroups> AdminUserProfile(int Id)
     
            {
                using (var context = new MDAOfficeEntities())
                {
                    return context.Admin_UsersGroups
                        .Where(i => i.Id == Id)
                        .ToList();
     
                }
            }
    depuis mon programme j'appel ma méthode comme ceci :

    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
     
    class Program
        {
            static void Main(string[] args)
            {
                MDAUsers _test = new MDAUsers();   // On créer une instance de la classe MDAUser
     
                var UserProfile = _test.AdminUserProfile(1);
     
                foreach (var e in UserProfile)
                {
                    Console.WriteLine("User Name : " + e.Admin_Users.DisplayName);
                    Console.WriteLine("Rights : " + e.AccessRight);
                    Console.WriteLine("Groupe Name : " + e.Admin_Groups.GroupeName);
                }
     
                Console.WriteLine("\n\nAppuyez sur une touche pour continuer.");
                Console.ReadKey();
            }
        }
    Et maintenant quand je l'exécute, j'ai le message :

    System.ObjectDisposedException*: 'L'instance ObjectContext a été supprimée et ne peut plus être utilisée pour les opérations qui requièrent une connexion.'

  4. #4
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Arf désolé. J'ai regardé un peu trop vite ton code...

    Quoiqu'il en soit, pour faire ce que tu souhaites faire, il faut
    • ou bien que ton contexte existe encore au moment où tu récupères les info (pour éviter l'exception) ;
    • ou bien tout récupérer d'un coup (ce que tu faisais initialement) mais en créant une structure ou une classe pour recevoir les informations, et pas en utilisant une classe anonyme. Ainsi, tu pourras modifier la signature de ta méthode pour qu'elle renvoit un List<InfoAdmin>. Et dans ton code tu pourras écrire
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
       return context.Admin_UsersGroups
                          .Where(i => i.Id == Id)
                          .Select(a => new InfoAdmin()
                          {
                              Name = a.Admin_Users.DisplayName,
                              Groupe = a.Admin_Groups.GroupeName,
                              Permission = a.AccessRight
                          })
                          .ToList();
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    Bonjour,

    Merci pour ton aide, j'ai finalement opté pour créé la classe AdminInfo et cette fois-ci cela me retourne bien ce que je recherche.

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

Discussions similaires

  1. [Débutant] Message d'erreur "impossible de convertir implicitement le type.."
    Par LIANAZEL dans le forum C#
    Réponses: 9
    Dernier message: 29/06/2016, 18h42
  2. Réponses: 10
    Dernier message: 31/08/2015, 08h19
  3. [Débutant] Impossible de convertir implicitement le type 'string' en 'int?'
    Par Mougain's dans le forum ASP.NET
    Réponses: 4
    Dernier message: 19/11/2014, 14h29
  4. Réponses: 15
    Dernier message: 01/03/2011, 16h21
  5. Réponses: 6
    Dernier message: 22/07/2009, 15h27

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