AsEnumerable()扩展方法不适用于DataView

时间:2013-12-22 12:29:45

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

为什么AsEnumerable()扩展方法不适用于DataView?

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

我想做这样的事情:

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

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

1 个答案:

答案 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();