为什么我需要再次将DataRow转换为DataRow

本文关键字:DataRow 转换 为什么 | 更新日期: 2024-09-21 00:24:21

查看以下代码块,

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?为什么第二个案例无效?

为什么我需要再次将DataRow转换为DataRow

DataTable.Rows的返回类型DataRowCollection类可以追溯到泛型之前的黑暗时代,因此只实现IEnumerable而不是IEnumerable<DataRow>

您可以使用闪亮的新DataTable.AsEnumerable LINQ扩展方法,它返回一个IEnumerable<DataRow>:

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

事实上,您根本不需要Select(a => a)

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

PS:有一个Microsoft Connect功能请求,要求DataRowCollection实现IEnumerable<DataRow>。然而,由于有一个简单的替代方案(AsEnumerable),它们可能有其他优先级。