Résultat de type anonyme à partir d'une structure d'entité d'exécution de requête SQL
Je suis en utilisant entity framework 5.0 avec .net framework 4.0 première approche de code. Maintenant, je sais que je peux exécuter sql brut dans le cadre de l'entité par suite de
var students = Context.Database.SqlQuery<Student>("select * from student").ToList();
Il fonctionne parfaitement, mais ce que je veux, c'est le retour anonyme résultats. Par exemple je ne veux que des colonnes spécifiques de l'étudiant le tableau comme suit
var students = Context.Database.SqlQuery<Student>("select FirstName from student").ToList();
Il n'est pas de travail. il donne exception
Le lecteur de données est incompatible avec l' 'MyApp.DataContext.L'étudiant". Un membre de la nature, 'StudentId', n'a pas de colonne correspondante dans le lecteur de données avec le même nom.
J'ai donc essayé dynamic
type
var students = Context.Database.SqlQuery<dynamic>("select FirstName from student").ToList();
il n'est également pas de travail, il renvoie un objet vide. Pas de données disponibles.
Est-il possible de l'anonyme de type de résultat à partir d'une dynamique de requêtes SQL?
source d'informationauteur Manish Parakhiya
Vous devez vous connecter pour publier un commentaire.
Voici la solution finale qui a bien fonctionné pour moi.
Vous devez utiliser Sql brut pour que, la entitity cadre
SqlQuery<T>
ne fonctionne que pour des objets avec des types connus.voici la méthode que j'utilise :
Vous pouvez l'appeler comme ceci :
Vous pouvez essayer le code à partir d'ici, faites défiler vers le bas et de trouver la mise en œuvre de stankovski:
http://www.codeproject.com/Articles/206416/Use-dynamic-type-in-Entity-Framework-SqlQuery
Après avoir copié le code dans une classe statique, vous pouvez appeler cette fonction pour obtenir ce que vous voulez:
Si vous avez une entité et que vous souhaitez seulement certaines des propriétés du retour, vous pouvez obtenir une bien meilleure solution avec l'aide de la réflexion.
Ce code s'appuie sur le même échantillon que dans la réponse ci-dessus.
En plus de cela, vous pouvez spécifier un type et d'un tableau de champs que vous voulez revenir.
Le résultat est de type IEnumerable.
Vous pouvez l'appeler de cette façon:
Effectivement, il fonctionne sur les types simples seulement et il n'y a pas d'erreur de manipulation.