2010-11-15 111 views

回答

8

DataRowCollection一个.Where()方法只执行IEnumerable,而不是IEnumerable<DataRow>

扩展方法存在 - DataTableExtensions.AsEnumerable - 有效地“修复”这一点。您也可以拨打table.Cast<DataRow>(),但AsEnumerable返回的EnumerableRowCollection有更多功能。

所以你可以这样写:

var query = from row in table.AsEnumerable() 
      where ... 
      select ...; 

有在DataRowExtensions其他有用的扩展方法,最值得注意的是Field,所以你可以写:

var query = from row in table.AsEnumerable() 
      where row.Field<int>("Age") > 18 
      select row.Field<string>("Name"); 
+0

@Downvoter:护理评论? – 2010-11-15 18:53:32

+0

+1:谢谢,Jon。所以......我认为这个“AsEnumerable”方法必须付出一定的代价;否则该类将默认实现IEnumerable。你能告诉我这是什么成本吗? – 2010-11-15 20:52:22

相关问题