4

過去数日間、私は a を反復する方法を見つけようとしましたが、List<dynamic>あまり成功しませんでした。

それは私がやっていることです:

while (dr.Read())
{
    dynamic e = new ExpandoObject();
    var d = e as IDictionary<string, object>;
    for (var i = 0; i < dr.FieldCount; i++)
        d.Add(dr.GetName(i), DBNull.Value.Equals(dr[i]) ? null : dr[i]);

    result.Add(e);
}

IEnumerable<dynamic>上記のコードは、データを取得しているコントローラーで thenを返すメソッドです。

dynamic irionErrorsExport = oracleDbManager.GetStrCtrlNDGWithErrors(tableName, queryParamsList, periodo, "", "", "");

irionErrorsExport を反復処理し、EPPlus で使用する「具体的な」オブジェクトを作成する必要があるため、今は行き詰まっています。

それが可能であるかどうかを教えて、簡単な例を示してもらえますか?

4

3 に答える 3

0
while (dr.Read())
{
    IDictionary<string, object> e = new ExpandoObject();

    for (var i = 0; i < dr.FieldCount; i++)
        e.Add(dr.GetName(i), DBNull.Value.Equals(dr[i]) ? null : dr[i]);

    result.Add(e);
}

呼び出しメソッドから「チート」します。動的コレクションが であることはわかっているExpandoObjectので、

foreach (IDictionary<string, object> row in result)
{
    foreach (var kv in row)
    {
        Console.WriteLine("{0}: {1}", kv.Key, kv.Value);
    }
}

最後に、メソッドが単純に aList<IDictionary<string, object>>を返す方がよいでしょう。必要はありませdynamicん。

動的型のリフレクションは難しいです。ダックタイピングを使用できない限り(ダックタイピングとは、オブジェクトがDuck()正確に何であるかを知らなくても、オブジェクトができることがわかっている場合であるため、行うことができますdynamic x = something; x.Duck();)、それはセミハードです。これについて私を信用できない場合は、動的オブジェクトのメンバーを反映​​するにはどうすればよいですか? を読んでみてください。

于 2013-08-11T17:19:18.443 に答える