为什么我不能用linq迭代可以用foreach迭代的东西?

1 c# linq foreach datarowcollection

我有一组表行(类型DataRowCollection)。我写的完全正确:

foreach(var row in myDataRowCollection)
{
  // Something with row
}
Run Code Online (Sandbox Code Playgroud)

但是以下内容将无法编译:

myDataRowCollection.ToList();
Run Code Online (Sandbox Code Playgroud)

甚至

myDataRowCollection.Select(...
Run Code Online (Sandbox Code Playgroud)

这些System.Linq扩展DataRowCollection未实现的期望是什么?

Hen*_*man 5

foreach()基于模式(docs),实际上并不依赖IEnumerableGetEnumerator()足够。

class A // note: no interface
{
    public IEnumerator GetEnumerator() { ...} 
}
Run Code Online (Sandbox Code Playgroud)

另一方面,Linq是基于的扩展方法IEnumerable<T>

您的DataRowCollection工具IEnumerable却没有IEnumerable<DataRow>。对于Linq来说太老了。

但是有一些可用的辅助方法,myDataRowCollection.AsEnumerable().Select(...)应该可以使用。