2010-11-15 2 views
2

J'aime la syntaxe offerte par la méthode .Where() qui est disponible pour de nombreuses collections. Cependant, j'ai remarqué qu'il est ostensiblement absent de certaines collections.Pourquoi DataTable.Rows n'a-t-il pas de méthode .Where()?

Je suis sûr que cela a à voir avec une interface étant mis en œuvre ou non mis en œuvre, mais au-delà, je voudrais savoir pourquoi nous n'avons pas une méthode .Where() sur DataTable.Rows

Répondre

8

DataRowCollection seulement implémente IEnumerable, et non IEnumerable<DataRow>.

Une méthode d'extension existe - DataTableExtensions.AsEnumerable - pour "réparer" efficacement cela. Vous pouvez également appeler table.Cast<DataRow>() mais le EnumerableRowCollection renvoyé par AsEnumerable a un peu plus de fonctionnalités.

vous pouvez donc écrire:

var query = from row in table.AsEnumerable() 
      where ... 
      select ...; 

Il existe d'autres méthodes d'extension utiles dans DataRowExtensions, notamment Field, de sorte que vous pouvez écrire:

var query = from row in table.AsEnumerable() 
      where row.Field<int>("Age") > 18 
      select row.Field<string>("Name"); 
+0

@Downvoter: soins à commenter? –

+0

+1: Merci, Jon. Donc ... je suppose que cette méthode "AsEnumerable" doit imposer un certain coût; sinon, la classe implémenterait IEnumerable par défaut. Pouvez-vous me dire quel est ce coût? –

Questions connexes