【问题标题】:AsEnumerable() extension method doesn't work on DataViewAsEnumerable() 扩展方法在 DataView 上不起作用
【发布时间】:2013-12-22 12:29:44
【问题描述】:

为什么AsEnumerable() 扩展方法在 DataView 上不起作用?

当你用某个DataTable初始化一个DataView时,为什么不能查询它以将结果存储在一个泛型集合中?

我想做这样的事情:

DataView dv = new DataView(ds.Tables[0]);

List<String> li = (from row in dv.AsEnumerable select row).ToList();

【问题讨论】:

  • 请向我们展示您尝试过的代码。
  • DataView dv = new DataView(ds.Tables[0]); List li = (from row in dv.AsEnumerable select row).ToList();
  • 正如您自己指出的,为了调用一个方法,您需要括号。

标签: c# asp.net linq c#-4.0


【解决方案1】:

AsEnumerable() 扩展方法可用于实现IEnumerable&lt;T&gt; 的任何类型。 DataView 没有实现IEnumerable&lt;T&gt;,它仅仅实现了IEnumerable。既然你知道所有的项目都是DataRowView 对象,你可以使用Cast&lt;T&gt;(),像这样:

List<DataRowView> li = (from row in dv.Cast<DataRowView>() select row).ToList();

请注意,由于您有select row,因此列表元素类型是DataRowView,而不是string

您也可以通过显式指定row 的类型来编写它,如下所示:

List<DataRowView> li = (from DataRowView row in dv select row).ToList();

【讨论】:

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