我正在尝试学习ADO.NET,我发现了类似于" ExpandoObject"这真的很有用。
connection.Open();
SqlCommand command = new SqlCommand("Select * from Products [p]", connection);
SqlDataReader reader = command.ExecuteReader();
DataTable datatable = new DataTable();
datatable.Load(reader);
dynamic products = new List<dynamic>();
for (int i = 0; i < datatable.Rows.Count; i++)
{
products.Add(new ExpandoObject());
for (int v = 0; v < datatable.Columns.Count; v++)
{
string column_Name = datatable.Columns[v].ColumnName;
object value = datatable.Rows[i].ItemArray[v];
products[i].column_Name = value;
}
}
reader.Close();
connection.Close();
listBox1.Items.Add(products[1].ProductName);
我顺便使用Northwind数据库。 &#34;列名&#34;和&#34;价值&#34;部分工作完美无瑕。错误部分是&#34; products [i] .column_Name = value;&#34;。我想要类似的东西 &#34;产品[1] .ProductID = 1&#34;在那里。我怎样才能做到这一点。感谢。
答案 0 :(得分:1)
ExpandoObject
也实现了IDictionary<string, object>
。对于此接口,键是属性类型,值是该属性的值。使用此接口,您可以使用在运行时确定的属性来获取/设置ExpandoObject
的值,而不是编译时间。
for (int i = 0; i < datatable.Rows.Count; i++)
{
IDictionary<string, object> nextItem = new ExpandoObject();
for (int v = 0; v < datatable.Columns.Count; v++)
{
nextItem[datatable.Columns[v].ColumnName] =
datatable.Rows[i].ItemArray[v];
}
products.Add(nextItem);
}