使用Linq和DbDataReader

时间:2011-05-28 20:24:23

标签: c# linq

我正在尝试使用this question中的代码来实现这样的查询:

    public void LoadLive(DbConnection pConnection)
    {
        using (DbDataReader lReader = pConnection.ExecuteReader("..."))
        {
            mList.AddRange(from t in lReader select new MyObject { Name = t.GetString(0) });
        }
    }

当我尝试编译它时(使用扩展方法),我收到此错误:

 error CS1934: Could not find an implementation of the query pattern for source type 'System.Data.Common.DbDataReader'.  'Select' not found.  Consider explicitly specifying the type of the range variable 't'.

我错过了一些关于它应该如何工作的内容吗?

3 个答案:

答案 0 :(得分:2)

您必须从链接问题的答案中调用扩展方法:

 mList.AddRange(from t in lReader.AsEnumerable() 
                select new MyObject { Name = t.GetString(0) });

答案 1 :(得分:0)

除非您要编写自己的扩展方法,否则Select,Where等都返回IEnumerable,典型的方法签名将类似于Func<DbDataReader, myT>。您正在寻找的是Jon Skeet's sample here

答案 2 :(得分:0)

当没有为给定数据源实现标准查询运算符时,会生成

Compiler error CS1934

在您的情况下(DbDataReader),您可以将t的类型指定为IDataRecord

mList.AddRange(from IDataRecord t in lReader
               select new MyObject { Name = t.GetString(0) });