如何在运行时动态地将sqldatareader的fieldname分配给动态对象?
让我们假设我已经将SqlDataReader的字段名读入变量:
string sqlDataReaderFieldNameStringVariable = reader.GetName(index);
我不能说:
dynamic dyn = new ExpandoObject();
dyn.sqlDataReaderFieldNameStringVariable = "test";
我该怎么做?
更新:
还有时间得到一个点;-)我将我的dyn对象添加到ExpandoObject类型的List中,这是方法的返回值。当我通过data [0]访问列表时.test属性在编译时不存在???
当我在返回List的方法之外执行此操作时:
dynamic bla = (ExpandoObject)data[0];
String shit = bla.Name;
为什么我要施展它?任何解决方法?谢谢Jon。
答案 0 :(得分:2)
您必须先将ExpandoObject
dyn
转换为IDictionary<string, object>
才能执行此操作:
dynamic dyn = new ExpandoObject();
var dynDict = dyn as IDictionary<string, object>;
dynDict[sqlDataReaderFieldNameStringVariable] = "test";
答案 1 :(得分:1)
对于大多数动态对象,这很棘手。可行(使用IDynamicMetaObjectProvider
)但很棘手。如果您使用ExpandoObject
真的,那很简单,因为它实现了IDictionary<string, object>
:
dynamic dyn = new ExpandoObject();
var dictionaryView = (IDictionary<string, object>) dyn;
dictionaryView[sqlDataReaderFieldNameStringVariable] = "test";