.net EnumerablerRowCollection的目的是什么<;特罗>;上课?

.net EnumerablerRowCollection的目的是什么<;特罗>;上课?,.net,linq,datatable,.net,Linq,Datatable,如文件中所述 返回IEnumerable对象,其中泛型参数T为DataRow。此对象可用于LINQ表达式或方法查询 但是AsEnumerable()的返回类型不仅仅是一个IEnumerable它还是一个EnumerablerRowCollection 为什么有这种类型?它提供了什么好处,比如说DataTable.Rows.Cast(),它只提供了一个IEnumerable?页面中的 有几种扩展方法专门从中获取并返回EnumerableRowCollection,我假设这些方法有DataTable

如文件中所述

返回IEnumerable对象,其中泛型参数T为DataRow。此对象可用于LINQ表达式或方法查询

但是
AsEnumerable()
的返回类型不仅仅是一个
IEnumerable
它还是一个
EnumerablerRowCollection

为什么有这种类型?它提供了什么好处,比如说
DataTable.Rows.Cast()
,它只提供了一个
IEnumerable

页面中的 有几种扩展方法专门从中获取并返回
EnumerableRowCollection
,我假设这些方法有
DataTable
特定的实现,在简单使用
IEnumerable

我还发现了这个

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


我原以为LinqTo对象涵盖了LINQ与IEnumerables的任何用法,其他任何东西都意味着使用了IQueryables,但我猜情况并非如此
IQueryable
也实现了
IEnumerable
,但是它有比
DataRowCollection

更多的IQueryable特定扩展方法可供使用,我想在框架之外的差异是不可见的/重要的,因为所有东西都是
私有的
内部的
。您可以看到实现细节。我不是数据集专家,因为我通常会试图避免它,但快速浏览源代码似乎表明它在数据集的排序和筛选方面做了一些特殊的工作,而
IEnumerable
则不会。您正在使用
System.Data
命名空间中的扩展方法,不是来自
System.Linq