如果其基类派生自IEnumerable <t>,为什么不能在DataRowCollection上使用LINQ

时间:2017-10-10 20:23:09

标签: c# .net linq

我发现无法在IEnumerable<T>的实例上直接使用LINQ,即System.Data.DataRowCollection

此类派生自实现System.Data.InternalDataCollectionBase的类IEnumerable<T>,因此能够在System.Data.DataRowCollection上使用LINQ函数完全有意义....但我不能。

检查以下示例:

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...
    }
}

我搜索了official docs of LINQ我找到的地方

  

标准查询运算符允许将查询应用于任何基于Enumerable的信息源。

我知道原因应该是非常简单的,但我无法弄清楚它是什么。所以我走了:

为什么不允许System.Data.DataRowCollection的实例使用LINQ?

[编辑] :已经有一个答案如何克服这一点,但不是为什么,所以这是我的目的:理解,而不是克服。

1 个答案:

答案 0 :(得分:1)

类型System.Collections.IEnumerable而不是IEnumerable<T>,但您可以使用CastOfType在此处使用LINQ:

DataRow dr1 = dt.Rows.Cast<DataRow>().First();