为什么AsEnumerable()
扩展方法不适用于DataView?
使用某个DataTable初始化DataView时,为什么不能查询它以将结果存储在通用集合中?
我想做这样的事情:
DataView dv = new DataView(ds.Tables[0]);
List<String> li = (from row in dv.AsEnumerable select row).ToList();
答案 0 :(得分:3)
AsEnumerable()
扩展方法可用于实现IEnumerable<T>
的任何类型。 DataView
未实现IEnumerable<T>
,它仅实现IEnumerable
。由于您知道所有项目都是DataRowView
个对象,因此您可以使用Cast<T>()
,如下所示:
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();