SqlDataReaderの現在の行のすべての列を辞書に変換する簡単な方法はありますか?
using (SqlDataReader opReader = command.ExecuteReader())
{
// Convert the current row to a dictionary
}
ありがとう
LINQを使用できます:
return Enumerable.Range(0, reader.FieldCount)
.ToDictionary(reader.GetName, reader.GetValue);
これより簡単?:
// 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));
}
あるタイプのコレクションから別のタイプのコレクションへのこの特定の変換が必要な理由はまだわかりません。
2016年3月9日にこの質問に出くわし、SLaksから提供された回答を使用することになりました。ただし、次のように少し変更する必要がありました。
dataRowDictionary = Enumerable.Range(0, reader.FieldCount).ToDictionary(i => reader.GetName(i), i=> reader.GetValue(i).ToString());
このStackOverflowの質問からガイダンスを見つけました: dataReaderを辞書に変換
すでにIDataRecord
です。
これにより、辞書とほぼ同じアクセス(キーによる)が可能になります。通常、行には数個以上の列がないため、ルックアップのパフォーマンスにそれほど違いはありません。唯一の重要な違いは「ペイロード」のタイプであり、そこでもディクショナリは値タイプにオブジェクトを使用する必要があるため、IDataRecordにEdgeを指定します。
GetValuesメソッドは、1D配列内のすべての値を受け入れて入力します。
それは役に立ちますか?