J'ai étendu mes entités à mettre en œuvre des interfaces spécifiques pour son type. J'essaie d'effectuer la requête suivante: Cependant, je continue à obtenir l'erreur suivante: p> "linq aux entités prend uniquement en charge la primitive des données de l'entité de casting Types " b> P> 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. P> est-ce possible? p> p>
3 Réponses :
Vous pouvez effectuer la distribution sur le client, contourner la couche de traduction de requête de l'entité en appelant Cependant, il est préférable d'inverser l'ordre de procéder au compte asen-témobère code>
méthode d'extension: code> vérifier: < / p>
+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é!
return results.Count() > 0 ? results.Select(result => (IApplicationEntity)result) .ToList() : null;
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é.
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 code> asen-témobile avant la distribution est l'astuce ici. p>
Essayez ce qui suit: p> Notez également qu'il n'est pas sage de vérifier compter () code> sur L'énorme, car cela signifie que la collection est itérale à deux reprises. p> p>
En fait, cela ne fonctionnera pas. Vous devriez faire le asenumerable code> avant i> 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. ;)