[英]Convert Dictionary<MyType>.ValueCollection to IList<MyType>
[英]How do I quickly convert DataTable to IList<myType>
在我的示例中,我尝试查看具有给定项源的Grid控件中的关键信息。 在这种情况下,要传递项目源,我需要将DataTable
转换为C#中的IList<myType>
。
我尝试了所有传统的转换方法,包括下面的代码,将DataTable
转换为IList
。
dt.AsEnumerable().Cast<object>().ToList()
但是所有传统方法对我都无济于事,因为我不知道确切使用了哪些对象以及它们在DataTable
相应列中的类型。 另外, DataTable
具有更多的列和行数。
例如,我的数据表中包含以下列值。
PlanRowPID,PlanRowClass,PlanRowVendor,PlanRowColor
PID 0,CLASS 8,VENDOR A,COLOR D
PID 1,CLASS 7,VENDOR B,COLOR C
PID 2,CLASS 9,VENDOR C,COLOR B
PID 3,CLASS 6,VENDOR D,COLOR B
最后,我想在语法上做以下事情,
IList<myType> list = new IList<myType>;
list.Add(new myType() {PlanRowPID = "PID 0",PlanRowClass = "CLASS 8",PlanRowVendor = "VENDOR A",PlanRowColor=COLOR D});
list.Add(new myType() {PlanRowPID = "PID 1",PlanRowClass = "CLASS 7",PlanRowVendor = "VENDOR B",PlanRowColor=COLOR C});
list.Add(new myType() {PlanRowPID = "PID 2",PlanRowClass = "CLASS 9",PlanRowVendor = "VENDOR C",PlanRowColor=COLOR B});
在我的应用程序中,我有超过10000个数据列,因此不可能将数据表中的每个对象都添加到列表中。我需要花费更多的时间和知识来查找DataTable
可用的每个列的数据类型,然后创建属性基于myType
类的类型。
因此,请提供任何最佳,最快的方法将DataTable
转换为IList<myType>
。
请试试,
private static List<T> ConvertDataTable<T>(DataTable dt)
{
List<T> data = new List<T>();
foreach (DataRow row in dt.Rows)
{
T item = GetItem<T>(row);
data.Add(item);
}
return data;
}
private static T GetItem<T>(DataRow dr)
{
Type temp = typeof(T);
T obj = Activator.CreateInstance<T>();
foreach (DataColumn column in dr.Table.Columns)
{
foreach (PropertyInfo pro in temp.GetProperties())
{
if (pro.Name == column.ColumnName)
pro.SetValue(obj, dr[column.ColumnName], null);
else
continue;
}
}
return obj;
}
调用示例
List<Student> studentDetails = new List<Student>();
studentDetails = ConvertDataTable<Student>(dt);
来源:-http: //www.c-sharpcorner.com/UploadFile/ee01e6/different-way-to-convert-datatable-to-list/
在这种情况下,要传递项目源,我需要将
DataTable
转换为C#中的IList
。
您不能仅将ItemsSource
属性设置为DataTable
的DefaultView
吗?
dataGrid.ItemsSource = dt.DefaultView;
然后,无需将其转换为列表。
DataView
实现IList
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.