查看以下代码块,
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?为什么第二种情况无效?
答案 0 :(得分: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>
实施AsEnumerable
。但是,由于有一个简单的替代方案({{1}}),它们可能还有其他优先事项。