我正在尝试使用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'.
我错过了一些关于它应该如何工作的内容吗?
答案 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)
在您的情况下(DbDataReader
),您可以将t
的类型指定为IDataRecord
:
mList.AddRange(from IDataRecord t in lReader
select new MyObject { Name = t.GetString(0) });