【发布时间】:2019-09-26 18:45:13
【问题描述】:
如何使用 LINQ 查询或 Lambda 表达式将数据表列与类型 T 的 DTO 对象的属性映射。这应该会自动映射到任何 DTO。如果有办法做到这一点,而无需对数据表的列名进行硬编码
DataTable dt = db.GetEmployees();
foreach(DataRow dr in dt.Rows)
{
var obj = new T();
PropertyInfo[] prop = obj.GetType().GetProperties();
var results = dt.AsEnumerable().Select(dr => new T
{
///How to directly map type T properties in prop with columns in datatable dt
FirstName = ?
//Expecting something like this
//FirstName = columnName of dt here
}
}
【问题讨论】:
-
你想避免使用反射吗?
-
@LawrenceZahner 可以使用反射。我只想避免手动逐行 foreach 属性和对数据表中的列名进行硬编码
-
好的,这开辟了一些可能性。 DataTable 的列名是否与 T 中的属性名完全匹配?
-
不完全匹配,例如
Property name = PhoneNumber , Column Name = Phone Number (WorkPhone) -
一个我没有探索过的替代品(所以不能说它是否确实有效)是 automapper 库,它有利于映射,只是不确定它是否适用于对象的数据表
标签: c# linq reflection mapping dto