我发现不可能直接在IEnumerable<T>ie实例上使用 LINQSystem.Data.DataRowCollection
System.Data.InternalDataCollectionBase这个类派生自实现 的类IEnumerable<T>,因此能够使用 LINQ 函数是完全有意义的System.Data.DataRowCollection......但我不能。
检查以下示例:
using (DBConnection connExport = DBConnection.OpenConnection())
{
DataTable dt = GetDataTableFromDatabase();
DataRow dr1 = dt.Rows.First(); // This LINQ is not allowed
foreach(DataRow dr in dt.Rows) // But enumerating it works fine
{
// Some processing...
}
}
Run Code Online (Sandbox Code Playgroud)
我搜索了LINQ 的官方文档, 发现了
标准查询运算符允许将查询应用于任何基于枚举的信息源。
我知道原因应该很简单,但我不知道是什么。所以我来了:
为什么 LINQ for 实例不允许System.Data.DataRowCollection?
[编辑]:已经有一个如何克服这个问题的答案,但没有答案,所以这就是我的目的:理解,而不是克服。
它的类型System.Collections.IEnumerable不是IEnumerable<T>,但您可以在此处使用Cast或OfType使用 LINQ:
DataRow dr1 = dt.Rows.Cast<DataRow>().First();
Run Code Online (Sandbox Code Playgroud)