我正在使用VS2010和C#。我有一个DataTable,我想转换为List。
Suppose:
Table dt;
在运行时想要从数据表创建类似的字段并填充List中的字段。列表属性没有现有的类。
ListName=TableName
List property name=Table column name
List Property type=Table column type
List items=Table rows
注意:最近在EF上工作。为满足我的项目要求,需要灵活地在运行时输入和执行ESQL。我不想把这个执行结果放在datatable或List<DataRow>
,想将此结果列入清单。
List没有现有的类和属性,不想在列表Type:DataRow
答案 0 :(得分: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