ExpandoObject属性名称章节不起作用

时间:2014-08-27 16:00:59

标签: c# ado.net

我正在尝试学习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;在那里。我怎样才能做到这一点。感谢。

1 个答案:

答案 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);
}