这个问题是“LINQ cast with a Data.DataTableCollection”的连续问题,这里是链接 [question] LINQ cast with a Data.DataTableCollection @Lasse Espeholt
我遇到同样的情况。我想对集合 DataTableCollection 进行 LINQ 查询。但是,如果我写下以下代码:
from dataTable in dataSet.Tables
Visual Studio 会报错“找不到源类型'System.Data.DataTableCollection'的查询模式的实现”。所以解决方案是将代码更改为以下内容:
from dataTable in dataSet.Tables.Cast<DataTable> ()
所以我从互联网上挖掘了根本原因。我发现了一些线索,“一个典型的 LINQ to Objects 查询表达式不仅将一个实现 IEnumerable 的类作为其数据源,而且它还返回一个相同类型的实例。” 在这个页面中。所以我想知道DataTableCollection 不继承IEnumerable 接口。但是根据我查看MSDN,我发现DataTableCollection的继承关系如下:
DataTableCollection
InternalDataCollectionBase
ICollection
IEnumerable
所以这种继承关系意味着DataTableCollection只继承接口IEnumerable,不继承接口IEnumerable。所以它不能支持 LINQ 查询。解决方案是使用 cast 方法转换为 IEnumerable 然后可以进行 LINQ 查询。
所以我总结为想要启用LINQ to object的功能的类,它必须继承接口IEnumerable和IEnumerable。
我的总结对吗?IEnumerable 和 IEnumerable 有什么区别?