web-dev-qa-db-ja.com

SqlDataReader-現在の行を辞書に変換する方法

SqlDataReaderの現在の行のすべての列を辞書に変換する簡単な方法はありますか?

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

ありがとう

28
Martin

LINQを使用できます:

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

これより簡単?:

// 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));
}

あるタイプのコレクションから別のタイプのコレクションへのこの特定の変換が必要な理由はまだわかりません。

24
Cade Roux

2016年3月9日にこの質問に出くわし、SLaksから提供された回答を使用することになりました。ただし、次のように少し変更する必要がありました。

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

このStackOverflowの質問からガイダンスを見つけました: dataReaderを辞書に変換

3
Mifo

すでにIDataRecordです。

これにより、辞書とほぼ同じアクセス(キーによる)が可能になります。通常、行には数個以上の列がないため、ルックアップのパフォーマンスにそれほど違いはありません。唯一の重要な違いは「ペイロード」のタイプであり、そこでもディクショナリは値タイプにオブジェクトを使用する必要があるため、IDataRecordにEdgeを指定します。

1
Joel Coehoorn

GetValuesメソッドは、1D配列内のすべての値を受け入れて入力します。
それは役に立ちますか?

0
shahkalpesh