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)的主要内容,如果未能解决你的问题,请参考以下文章

由于我的查询,DataReader 仍然打开

DataReader 循环查询中的 C# MySQL 查询

无法从 .NET OleDB.DataReader 检索行

SQL DataReader 如何显示查询中的空值

DataTable.Load 显示的行数少于源 DataReader

Azure 表查询:System.InvalidOperationException:“已经有一个打开的 DataReader 与此命令关联,必须先关闭。”