Подтвердить что ты не робот

SqlDataReader - Как преобразовать текущую строку в словарь

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

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

Спасибо

4b9b3361

Ответ 1

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

return Enumerable.Range(0, reader.FieldCount)
                 .ToDictionary(reader.GetName, reader.GetValue);

Ответ 2

Легче этого?:

// 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

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

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

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

Ответ 4

Это уже IDataRecord.

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

Ответ 5

Метод GetValues ​​принимает и помещает все значения в 1D-массив.
Помогает ли это?