9
votes

LINQ aux entités Projection de la liste imbriquée

Assumer ces objets ...

MyClass myClass = (from MyClassTable mct in this.Context.MyClassTableSet
                        select new MyClass
                        {
                             ID = mct.ID,
                             Name = mct.Name,
                             Things = (from MyOtherClass moc in mct.Stuff
                                       where moc.IsActive
                                       select new MyOtherClass
                                       {
                                            ID = moc.ID,
                                            Value = moc.Value
                                       }).AsEnumerable()
                        }).FirstOrDefault();


0 commentaires

4 Réponses :


1
votes

Je ne suis pas sûr de quoi exactement votre question, mais list est implémenter ienumerable (qui est juste une interface pour une séquence énumérable) .

Un code qui fera votre projection et que des choses soient une liste au lieu d'un iNeumable utiliserait l'opérateur Tolist (), qui crée une liste de n'importe quel ienumerable < T> ceci: xxx


4 commentaires

Tolist () sur une requête Linq à des entités n'est pas prise en charge, c'est pourquoi j'ai posé cette question.


Y a-t-il une référence pour cela? Le LINQ de MSDN Vers des entités montre que vous pouvez en fait utiliser TOLIST. msdn.microsoft.com/en-us/library/bb896246. ASPX? PPUD = 4


Vous pouvez utiliser Tolist () à la suite d'une requête, mais maintenant dans une requête. Dans l'exemple de votre lien, le Tolist () est ajouté à la fin d'une expression LINQ. Dans mon code, il est incorporé dans l'expression, par conséquent, non pris en charge.


Gotcha, la cause de la racine est linq aux entités ne peut pas instancier la liste ou n'importe quel iEnumerable à ce sujet, à l'intérieur d'une requête. Mosesofegypt.net/post/...



16
votes

vous ne le faites pas. Vous devez faire cette partie dans L2O.

Pour que vous puissiez faire: xxx

Il n'y a aucun moyen de le faire dans une requête.


1 commentaires

Merci, je viens de comprendre cela aussi.



-3
votes

Cette réponse a été utile, mais c'est comme ça que je fais cela. Cela convertit en Pocos et peut soutenir des listes imbriquées illimitées. Très simple mais puissant: xxx


0 commentaires

0
votes

Veuillez regarder la solution suivante. Vous pouvez séparer les champs de la liste et iéenumérables dans votre classe: xxx

Vous devez donc utiliser des chosesForLinq dans EF Linq requêtes: xxx

et Utilisez des choses plus tard: xxx


0 commentaires