This article显示了如何向动态对象添加属性。
dynamic contact = new ExpandoObject();
contact.Name = “Patrick Hines”;
contact.Phone = “206-555-0144”;
如果我改为列["Id", "Name", "Phone"]
列。
DataTable dt = ContactRepository.GetContactInfo(sqlText, columns);
当我得到结果时,我想做类似
的事情foreach(DataRow row in dt.Rows)
{
dynamic contact = new ExpandoObject();
foreach(string colName in columns)
{
// extract the value of the column from the row
// add an property that has the same name has the column name
}
}
我试图避免在添加之前检查每个可能的列。
至少有36列。
if(columns.Contains("Phone"))
contact.Phone = row["Phone"].ToString();
我真的想要实现的最后一个功能是为了避免所有这些检查。
感谢您的帮助
答案 0 :(得分:4)
所以,我不知道如何使用DataRow
课程,但在这种情况下我知道如何使用Expando
:
foreach(DataRow row in dt.Rows)
{
IDictionary<string,object> contact = new ExpandoObject();
foreach(string colName in columns)
{
contact.Add(colName,row[colName]);
}
dynamic contactDynamic = contact as ExpandoObject;
Console.WriteLine(contact.Phone);
}
小心! ExpandoObject
实现IDictionary
界面,而不是Dictionary
类。