【问题标题】:Why I need to convert DataRow again into DataRow?为什么我需要再次将 DataRow 转换为 DataRow?
【发布时间】:2013-12-13 05:59:40
【问题描述】:

查看以下代码块,

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

【问题讨论】:

    标签: c# linq casting datatable


    【解决方案1】:

    DataTable.Rows 的返回类型,DataRowCollection 类,可以追溯到泛型之前的古老黑暗时期,因此,仅实现 IEnumerable 而不是 IEnumerable&lt;DataRow&gt;

    您可以改用闪亮的新DataTable.AsEnumerable LINQ extension method,它返回IEnumerable&lt;DataRow&gt;

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

    其实你根本不需要Select(a =&gt; a)

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

    PS:有一个Microsoft Connect feature request 可以使DataRowCollection 实现IEnumerable&lt;DataRow&gt;。但是,由于有一个简单的替代方案可用 (AsEnumerable),他们可能有其他优先事项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多