EnumerableRowCollection <trow>类的目的是什么?

时间:2015-11-11 16:16:29

标签: .net linq datatable

正如文档DataTable.AsEnumerable()

中所述
  

返回IEnumerable&lt; T&gt;对象,其中泛型参数T是DataRow。该对象可用于LINQ表达式或方法查询。

AsEnumerable()的返回类型不仅仅是IEnumerable<DataRow>,还是EnumerableRowCollection<DataRow>

为什么有这种类型?与DataTable.Rows.Cast<DataRow>()仅提供IEnumerable<DataRow>

相比,它提供了什么好处?

1 个答案:

答案 0 :(得分:0)

从那里的EnumerableRowCollection<TRow>页面 有几种扩展方法专门从中获取并返回EnumerableRowCollection<TRow>我假设这些方法有DataTable个特定实现,仅在使用IEnumerable<DataRow>

时无法使用

我还发现了blog post状态

  

为了让LinqDataView在不使用IQueryable的情况下工作(出于性能原因我们不想这样做),我们必须坚持实现类。只要使用EnumerableRowCollection实例而不是实现IEnumerable的“something”,我们就可以将每个LINQ运算符捕获到一个状态包中,这允许我们在DataView中重新创建LINQ查询的效果。

我曾经认为LINQ-To-Objects涵盖了LINQ与IEnumerables的任何使用,其他任何意味着使用了IQueryables,但我想情况并非如此。 IQueryable<T>也实现了IEnumerable<T>,但它有许多比IQ DataRowCollection<TRow>

更多可用的特定扩展方法