2012-02-24 12 views
0

実行時にsqldatareaderのフィールド名を動的オブジェクトに動的に割り当てる方法を教えてください。私が言うことができない実行時に動的オブジェクトのプロパティとしてリテラル文字列を割り当ててアクセスする

string sqlDataReaderFieldNameStringVariable = reader.GetName(index); 

dynamic dyn = new ExpandoObject(); 
dyn.sqlDataReaderFieldNameStringVariable = "test"; 

私はそれをどのように行うことができます

は、私は変数にSqlDataReaderののフィールド名を読んでいると仮定しましょうか?

UPDATE:私は私のDYNオブジェクトがメソッドの戻り値であるタイプExpandoObjectのリストに追加するポイントを;-)取得するために、まだ

時間。データを介してリストにアクセスするとき[0] .testプロパティはコンパイル時に存在しません???

私はリストを返す方法のこの外の操作を行います。私はそれをキャストしなければならないのはなぜ

dynamic bla = (ExpandoObject)data[0]; 
      String shit = bla.Name; 

?回避策はありますか?ありがとうジョン。

+1

ちょうど '一覧'代わりに – BrokenGlass

+0

を返し、これは素晴らしいです! P – Pascal

+0

それは「票」と呼ばれていますが、あなたの27の質問のすべてで2つの回答をアップvしただけなので、私は息を止めません;-) – BrokenGlass

答えて

2

あなたはそれを行うために、あなたのExpandoObjectdynIDictionary<string, object>に最初にキャストする必要があります。

dynamic dyn = new ExpandoObject(); 
var dynDict = dyn as IDictionary<string, object>; 
dynDict[sqlDataReaderFieldNameStringVariable] = "test"; 
+0

ああ愚かな私はダイナミックな必要はありませんすべて:P – Pascal

+0

文字列val = dyn.test;それはうまく動作します。ダイナミクスはクールです:P @BrokenGlass私はブラウザをリフレッシュしたときにJonの前にいた;-) – Pascal

1

最もダイナミックオブジェクトの場合、それは難しいです。 Doable(IDynamicMetaObjectProviderを使用)ですが、扱いにくいです。あなたがExpandoObjectを使用して本当にしている場合は、それがIDictionary<string, object>を実装しているため、それは簡単です:

dynamic dyn = new ExpandoObject(); 
var dictionaryView = (IDictionary<string, object>) dyn; 
dictionaryView[sqlDataReaderFieldNameStringVariable] = "test"; 
+0

まだポイントを取得する時間;-)メソッドの戻り値であるExpandoObject型のListにdynオブジェクトを追加します。データを介してリストにアクセスするとき[0] .testプロパティはコンパイル時に存在しません??? – Pascal

+0

@Pascal:あなたのコメントを解析するのが難しいと思っていますが、質問の編集として書くことができれば、私は何ができるかを見ていきます... –

+0

done! 123を行く。 – Pascal

関連する問題