2014-02-06 1 views
1

Почему не компилятор так:DataReader для Linq'd запроса словаря (String, Object)

 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() 

Первая часть работает нормально, если все, что я хочу, это запрос строк. Однако, я действительно хочу, это запрос, который предоставляет строки, которые являются Словарем (из String, Object), при этом ключ является полем FieldName, а значением является DataItem.

ответ

1

В настоящее время IEnumerable передается конструктору Dictionary, что, вероятно, является тем, о чем он жалуется. Вместо этого вы можете позвонить ToDictionary() на номер IEnumerable, чтобы получить 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) _ 
        }