1

我正在使用 VS2010 和 C#。我有一个要转换为列表的数据表。

Suppose:
Table dt;

在运行时希望从数据表中创建类似的字段并在列表中填充字段。列表属性没有现有的类。

ListName=TableName
List property name=Table column name
List Property type=Table column type
List items=Table rows

注意:最近在做EF。为了满足我的项目需求,需要灵活地使用在运行时输入和执行ESQL。我不想把这个执行结果放在datatable上List<DataRow>,或者想把这个结果放在list上。列表没有现有的类和属性,不想在列表类型上转换 DataTable 类型:DataRow

4

1 回答 1

1

我们仍然不确定您要做什么,但是如果您想创建动态对象列表,您可以尝试dynamic

var dynamicList = new List<dynamic>();   

然后你将不得不通过ExpandoObject

您必须将其转换IDictionary为将列名作为属性传递。

然后你可以访问这样的列表项item.YourColumnName

这是一个完整的例子:

            var dynamicList = new List<dynamic>();
            DataTable dt = new DataTable();
            dt.Columns.Add("Col1");
            dt.Columns.Add("Col2");
            dt.Rows.Add("val1","val2");
            dt.Rows.Add("val3", "val4");
            foreach (DataRow dr in dt.Rows)
            {
                dynamic myObj = new ExpandoObject();
                var p = myObj as IDictionary<string, object>;
                p[dr.Table.Columns[0].ColumnName] = dr[0];
                p[dr.Table.Columns[1].ColumnName] = dr[1];
                dynamicList.Add(p);
            }

            foreach (var item in dynamicList)
            {
                Console.WriteLine(item.Col1 + " " + item.Col2);
            }   

或 linq 当然也可以打印出值:

dynamicList.ForEach(x => Console.WriteLine(x.Col1 + " " + x.Col2));   

该程序将打印出:

val1 val2
val3 val4
于 2012-12-06T18:25:03.883 回答