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 :

[EF5] sub query et construction d'objets : plus possible ?


Sujet :

Entity Framework

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut [EF5] sub query et construction d'objets : plus possible ?
    Bonjour à tous,

    J'avais pour habitude de construire des objets accompagnés de leurs listes de sous objets en one shot. Une simple subquery fonctionnait. Depuis peu je n'y arrive plus, je ne sais pas pourquoi (peut etre depuis le passage à EF5, je ne sais pas).
    Voilà le gros de l'idée :
    J'ai deux objets modeles :
    - CategorieModel
    - ArticleModel
    Categorie contient une list(of Article)

    Ma requete EF est du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    from c in context.Categories
    select new CategorieModel with {.Id = c.Id,
                                                 .Libelle = c.Libelle,
                                                 .ListeArticles = from a in c.ListeArticles
                                                                      select new ArticleModel with {.Id = a.Id,
            .Titre = a.Titre}}
    Il me plante sur la sub query de selection des articles en me disant qu'il n'est pas capable de faire un cast d'IEnumerable(Of en List(Of et que Linq to entities ne prend en charge que le cast de types primitifs EDM.
    J'avoue que là je reste bloqué sur le problème et ne vois pas de solution. Si on regarde un peu sur les divers forums, ce que je fais est pourtant utilisé partout donc là je vois encore moins ce qui peut clocher :/

    Merci d'avance à toute personne me trouvant une piste ^^

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Lorsque tu fais une requête qui retourne plusieurs résultats, EF te retourne un objet de type IEnumerable<T>. Afin d'obtenir un objet de type List<T>, il faut faire appel à la méthode IEnumerable.ToList.

    Dans ton cas, je vois deux possibilités :

    Solution 1 : modifier le type de la propriété ListeArticles en IEnumerable<T>. Dans ce cas, pas besoin de modifier la requête.

    Solution 2 : modifier ta requête LinQ afin qu'elle retourne une List<T>. Dans ce cas, pas besoin de modifier le type de la propriété ListeArticles :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from c in context.Categories
    select new CategorieModel with
        {
            .Id = c.Id,
            .Libelle = c.Libelle,
            .ListeArticles = (from a in c.ListeArticles
                              select new ArticleModel with
                                 {
                                    .Id = a.Id,
                                    .Titre = a.Titre
                                 }).ToList()
        }
    T correspondant à la classe qui représente un article.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Merci pour ta réponse.

    La suggestion 1, j'y ai pensé mais ça apporte son lot de contraintes malheureusement
    Pour la 2, ce n'est pas possible. A partir du moment où tu executes un ToList dans une sous requete, il doit la traduire en T-SQL, or cette fonction n'en fait pas partie

    Du coup, c'est super galère et pourtant je suis quasi sur d'avoir réussi à faire ce truc il y a quelques mois mais pas sous la même version d'EF...

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/01/2008, 15h34
  2. Dessiner des objets plus complexes avec OpenGL
    Par Premium dans le forum OpenGL
    Réponses: 18
    Dernier message: 21/11/2006, 17h55
  3. Réponses: 29
    Dernier message: 17/07/2006, 01h33
  4. Query-string sur l'objet history
    Par AlLutun dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/11/2004, 09h20

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