J'essaie d'effectuer une requête LINQ sur un objet DataTable et, bizarrement, je constate que l'exécution de telles requêtes sur des DataTables n'est pas simple. Par exemple :
var results = from myRow in myDataTable
where results.Field("RowNo") == 1
select results;
Ceci n'est pas autorisé. Comment faire pour que quelque chose comme ça fonctionne ?
Je suis étonné que les requêtes LINQ ne soient pas autorisées sur les DataTables !
3 votes
Vous pouvez trouver d'autres exemples de LINQ/Lambda à l'adresse suivante webmingle.blogspot.com/2010_09_01_archive.html
0 votes
C'est parce que les tables de données ont précédé LINQ d'un certain nombre d'années. Utilisez plutôt une table de données fortement typée ; c'est une meilleure expérience que cette méthode de typage stricte, qui nuit à l'intellisense.
dt.Rows["FirstName]
junk Avec une table fortement typée (ajoutez un fichier de type DataSet à votre projet et créez des tables à l'intérieur de celui-ci dans le concepteur visuel), il vous suffit d'écrire par ex.myStronglyTpedDataset.Person.Where(p => p.FirstName == "John")
- toute la magie pour que cela arrive est déjà faite.0 votes
@CaiusJard cela signifie-t-il que vous devriez créer un fichier de type DataSet pour chaque requête ?
0 votes
Pas pour toutes les requêtes, non. Le jeu de données représente les entités modélisées, donc de la même manière que vous pouvez avoir une entité Order qui a une liste d'entités Product dans une application EF, votre jeu de données fortement typé a une OrdersDataTable qui a une relation avec une ProductsDataTable. C'est un effort similaire pour les créer aussi si vous avez une base de données, car EF peut échafauder des entités à partir d'une base de données existante, tout comme le concepteur de jeux de données. Si vous deviez ajouter de nouvelles entités à votre code, c'est un peu plus facile avec les ensembles de données ; vous cliquez simplement sur ajouter une table, sur ajouter des colonnes, etc. et en arrière-plan VS écrit votre code.
0 votes
Donc tout ce qui est nécessaire ici est un
AsEnumerable()
appel. Je ne sais pas pourquoi ça demande autant de réponses.