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

5

请看以下代码块:

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?第二种情况为什么无效?
1个回答

5
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: 有一个微软连接功能请求,要求DataRowCollection实现IEnumerable<DataRow>接口。然而,由于已经有一个简单的替代方法(AsEnumerable),他们可能有其他优先事项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接