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

时间:2013-12-13 05:59:40

标签: c# linq casting datatable

查看以下代码块,

        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 个答案:

答案 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:DataRowCollectionIEnumerable<DataRow>实施AsEnumerable。但是,由于有一个简单的替代方案({{1}}),它们可能还有其他优先事项。