SqlDataReader - Как преобразовать текущую строку в словарь - PullRequest
28 голосов
/ 27 мая 2009

Есть ли простой способ преобразовать все столбцы текущей строки SqlDataReader в словарь?

using (SqlDataReader opReader = command.ExecuteReader())
{
// Convert the current row to a dictionary
}

Спасибо

Ответы [ 5 ]

56 голосов
/ 26 ноября 2010

Вы можете использовать LINQ:

return Enumerable.Range(0, reader.FieldCount)
                 .ToDictionary(reader.GetName, reader.GetValue);
24 голосов
/ 27 мая 2009

Проще, чем это?:

// Need to read the row in, usually in a while ( opReader.Read ) {} loop...
opReader.Read();

// Convert current row into a dictionary
Dictionary<string, object> dict = new Dictionary<string, object>();
for( int lp = 0 ; lp < opReader.FieldCount ; lp++ ) {
    dict.Add(opReader.GetName(lp), opReader.GetValue(lp));
}

Я все еще не уверен, зачем вам нужно именно это преобразование из одного типа коллекции в другой.

3 голосов
/ 09 марта 2016

Я наткнулся на этот вопрос 9 марта 2016 года и в итоге использовал ответ, предоставленный SLaks. Однако мне нужно было немного изменить его так:

dataRowDictionary = Enumerable.Range(0, reader.FieldCount).ToDictionary(i => reader.GetName(i), i=> reader.GetValue(i).ToString());

Я нашел руководство по этому вопросу StackOverflow: преобразование dataReader в словарь

1 голос
/ 27 мая 2009

Это уже IDataRecord.

Это должно дать вам примерно такой же доступ (по ключу) к словарю. Поскольку в строках обычно не больше нескольких столбцов, производительность поисков не должна быть такой разной. Единственным важным отличием является тип «полезной нагрузки», и даже там ваш словарь должен будет использовать объект для типа значения, поэтому я даю преимущество IDataRecord.

0 голосов
/ 27 мая 2009

Метод GetValues ​​принимает и вставляет все значения в одномерном массиве.
Это помогает?

...