9
votes

Cast Linq Résultats à la liste

J'ai étendu mes entités à mettre en œuvre des interfaces spécifiques pour son type. J'essaie d'effectuer la requête suivante: xxx

Cependant, je continue à obtenir l'erreur suivante:

"linq aux entités prend uniquement en charge la primitive des données de l'entité de casting Types "

En gros, ce que je veux faire, c'est toujours convertir les résultats du type d'entité brut en une liste générique de l'interface informatique des outils.

est-ce possible?


0 commentaires

3 Réponses :


21
votes

Vous pouvez effectuer la distribution sur le client, contourner la couche de traduction de requête de l'entité en appelant asen-témobère méthode d'extension: xxx

Cependant, il est préférable d'inverser l'ordre de procéder au compte vérifier: < / p> xxx


3 commentaires

+1, toutefois, cela exécutera deux requêtes de DB (pour le nombre et pour tolisser) ... Il serait probablement préférable d'appeler Tolist avant, puis vérifiez le nombre d'articles.


@Thomas: Regardez la deuxième requête.


Merci à son étonnant à quel point vous faites une façon de faire un chèque, le nombre d'amélioration de l'efficacité!



0
votes
return results.Count() > 0 ? 
results.Select(result => (IApplicationEntity)result)
.ToList() : null;

2 commentaires

Je ne pense pas que cela fonctionnera, pour la même raison que la méthode de CAST ne le fait pas. Vous devez convertir la requête en premier premier


Le message indique qu'il ne sait pas comment transformer l'opérateur moulé () à Linq vers des entités. Ceci est en fait un code écrit par le fournisseur du fournisseur LINQ (par exemple, LINQ à SQL, LINQ aux objets, etc.) Les autres affiches ont proposé de modifier l'appel à Asenumerable pour forcer l'utilisation de LINQ vers des objets et ont ainsi la distribution () L'opérateur réussit. Je faisais la même chose mais j'utilisais C # à la place en faisant explicitement la projetage d'une distribution dans le code. Essayez-le et laissez-moi savoir s'il a fonctionné.



3
votes

Si vous souhaitez lancer vos résultats sur un type complexe, vous devez forcer le code à utiliser LINQ vers des objets plutôt que LINQ vers des entités.

appeler la méthode d'extension asen-témobile avant la distribution est l'astuce ici.

Essayez ce qui suit: xxx

Notez également qu'il n'est pas sage de vérifier compter () sur L'énorme, car cela signifie que la collection est itérale à deux reprises.


2 commentaires

En fait, cela ne fonctionnera pas. Vous devriez faire le asenumerable avant la distribution. Sinon, EF essaiera de le traduire en une requête pour exécuter sur le fournisseur.


@Mehrdad: trop rapide pour votre propre bien. J'ai édité le poteau juste avant votre commentaire. ;)