从 DbCommand.ExecuteReader 中的 Linq 选择中没有记录添加到 DataTable
Posted
技术标签:
【中文标题】从 DbCommand.ExecuteReader 中的 Linq 选择中没有记录添加到 DataTable【英文标题】:No records are added to DataTable in Linq Select from DbCommand.ExecuteReader 【发布时间】:2011-04-14 03:18:58 【问题描述】:这段代码看起来应该可以工作,实际上它可以编译并运行。但是,cmd.ExecuetReader()
中的记录(并且有记录)并未按预期添加到dt
。有人知道可能缺少什么吗?
DataTable dt = new DataTable();
cmd.Connection.Open();
cmd.ExecuteReader().Cast<DbDataRecord>().Cast<DataRow>().Select(r=>dt.Rows.Add(r.ItemArray));
或者,有没有更直接的方法,当然使用 linq :)
【问题讨论】:
【参考方案1】:Linq 很懒惰。它只会在您实际访问它的数据时执行。
这可能有效:
cmd.Connection.Open();
var data = cmd.ExecuteReader().Cast<DbDataRecord>().Cast<DataRow>().Select(r=>r.ItemArray).ToList();
DataTable dt = new DataTable();
foreach(var d in data)
dt.Rows.Add(d);
调用 ToList()
强制 linq 执行
【讨论】:
谢谢。实际上刚刚发现这种转换: Cast以上是关于从 DbCommand.ExecuteReader 中的 Linq 选择中没有记录添加到 DataTable的主要内容,如果未能解决你的问题,请参考以下文章