2013-12-13 70 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的返回类型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:有使DataRowCollection实施IEnumerable<DataRow>Microsoft Connect feature request。然而,由于有一个简单的替代方案(AsEnumerable),他们可能有其他优先事项。

相关问题