2013-12-13 2 views
4

Посмотрите на следующий блок кода,Почему мне нужно снова преобразовать DataRow в DataRow?

 DataTable _table = new DataTable(); 

     //1) Why I need to Convert DataRow again into DataRow by Casting ? 
     List<DataRow> _rows = _table.Rows.Cast<DataRow>().Select(a => a).ToList(); 

     //2) Why this is not valid? 
     List<DataRow> _rows = _table.Rows.Select(a => a).ToList(); 

В первом случае, почему мне нужно преобразовать DataRow снова в DataRow? и почему второй случай недействителен?

ответ

5

DataTable.Rows «s тип возврата, то DataRowCollection класс, датируется старые, темные времена до дженериков, и, таким образом, реализует только IEnumerable, а не IEnumerable<DataRow>.

Вы можете использовать новенький DataTable.AsEnumerable LINQ extension method вместо этого, который возвращает IEnumerable<DataRow>:

List<DataRow> _rows = _table.AsEnumerable().Select(a => a).ToList(); 

На самом деле, вам не нужно Select(a => a) вообще:

List<DataRow> _rows = _table.AsEnumerable().ToList(); 

PS: Существует a Microsoft Connect feature request сделать DataRowCollection реализовать IEnumerable<DataRow>. Однако, поскольку имеется простая альтернатива (AsEnumerable), они, вероятно, имеют другие приоритеты.

Смежные вопросы