DataReader 到 Linq'd 查询 Dictionary(String, Object)
Posted
技术标签:
【中文标题】DataReader 到 Linq\'d 查询 Dictionary(String, Object)【英文标题】:DataReader to Linq'd query of Dictionary(String, Object)DataReader 到 Linq'd 查询 Dictionary(String, Object) 【发布时间】:2014-02-06 20:29:06 【问题描述】:编译器为什么不这样:
Dim AdDr As SqlDataReader = Addcommand.ExecuteReader()
Dim query = From row In AdDr.Cast(Of Data.Common.DbDataRecord)() _
Select New With _
.Items = New Dictionary(Of String, Object)( _
(From ii In Enumerable.Range(0, row.FieldCount) _
Select New DictionaryEntry(key:=row.GetName(ii), value:=row.GetValue(ii)))) _
Dim rslt = query.ToList()
如果我想要的只是行的查询,第一部分工作得很好。但是,我真正想要的是一个查询,它提供 Dictionary(of String, Object) 的行,键是 FieldName,值是 DataItem。
【问题讨论】:
【参考方案1】:目前IEnumerable
正在传递给Dictionary
的构造函数,这可能就是它所抱怨的。相反,您可以在IEnumerable
上致电ToDictionary()
以获取您的Dictionary
。像这样的...
Dim query = From row In AdDr.Cast(Of Data.Common.DbDataRecord)() _
Select New With _
.Items = _
(From ii In Enumerable.Range(0, row.FieldCount) _
Select New With .Key =row.GetName(ii), .Value = row.GetValue(ii) ).ToDictionary(Function (x) x.Key, Function(x) x.Value) _
【讨论】:
以上是关于DataReader 到 Linq'd 查询 Dictionary(String, Object)的主要内容,如果未能解决你的问题,请参考以下文章
DataTable.Load 显示的行数少于源 DataReader
Azure 表查询:System.InvalidOperationException:“已经有一个打开的 DataReader 与此命令关联,必须先关闭。”