2017-06-28 19 views
1

与えられた入力パラメータに基づいて、列名が異なる可変数の列を返すsprocがあります。 (また、行数= 1)動的変数のインデックスに基づいて列名を読み取る

たとえば、入力が3の場合、sprocは3列を返し、入力が5の場合は5を返します。入力パラメータがわからない場合

私はC#アプリケーションでsprocを統合するためにdapperを使用していますが、私は以下のようにそれを返す型としてdynamicを使用しています。

dynamic returnValue = connection.Query<dynamic>("sproc and inputs") 

動的変数から列を読み取る方法について教えてもらえますか?

returnValue[0].col1, returnValue[0].col2を使用すると、クエリの対象となる列の数がわかりません。

returnValue[0]["c1"]などの列を読み込む方法はありますか。入力パラメータに基づいてすべての列を取得するためにループできるようにする方法はありますか?

答えて

1

connection.Query()を呼び出した結果をIEnumerable<IDictionary<string, object>>にキャストすると、結果を反復したり、インデックスと列名のキーを使用して結果にアクセスすることができます。


COL2 X
COL3 Y
W

COL2 BをCOL1
COL3 C
COL4 D
COL1を:例えば:印刷

IEnumerable<IDictionary<string, object>> results; 

string sql = @"select 'a' as col1, 'b' as col2, 'c' as col3, 'd' as col4 
       union 
       select 'w' as col1, 'x' as col2, 'y' as col3, 'z' as col4"; 

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 

    results = connection.Query(sql) as IEnumerable<IDictionary<string, object>>; 
} 

//we need to use ElementAt as we have an Enumerable but we could ToList it if required 
Console.WriteLine(results.ElementAt(0)["col1"]); 

//we can iterate the rows 
foreach (var row in results) 
{ 
    //then iterate the columns and get a KeyValuePair for each column 
    foreach (var col in row) 
    { 
     Console.WriteLine("{0} {1}", col.Key, col.Value); 
    } 
} 

col4 z

+0

ありがとう@petelids。私は間違いなくそれを試してみます。 –

+0

ありがとうございます@G_S、あなたがどのように乗っているか教えてください。 – petelids

+0

私は上記のコードを使用して結果を得ることができました。ありがとう@petelids。 –

関連する問題