【发布时间】:2021-02-03 07:20:28
【问题描述】:
我想从 DataTable 中填充对象列表,而不是显式地逐列分配数据元素,也不使用 ORM。使用 Dapper(一个小型 ORM),可以传递一个 POCO(普通对象)列表,并让它根据该 POCO 的“形状”自动匹配来自查询的“单元格”。我想使用 DataTable 对象做类似的事情。有没有办法在不使用 Dapper 的情况下镜像该功能?我想可以使用反射,但是要使反射可靠地工作通常需要“火箭科学”,尤其是在调试方面。性能是一个相对次要的问题。
public class Employee
{
public string lastName { get; set; }
public string firstAndMidName { get; set; }
public int employeeNumber { get; set; }
public int salary { get; set; }
}
// ...
public void runSample()
{
List<Employee> employeeList = new List<Employee>();
DataTable myDat = queryRDBMS("select * from Employees"); // typical query API (simplified)
employeeList = convertDataTableToList(myDat, modelClass: Employee); // the missing part
}
(更新)
【问题讨论】:
-
是的,你可以。您可以在没有显着性能影响的情况下这样做吗?可能不如 ORM,这也是人们使用它们的原因之一。
-
您的问题不清楚。您是在询问从数据库中检索数据并用它填充 DataTable 吗?如果是这样,请参阅this answer。否则,请添加更多详细信息,或者可能是显示您遇到问题的代码示例。
-
Dapper 不是 ORM,而是微 ORM。它所做的只是地图属性,没有变化跟踪,所以它非常轻量级。 @DavidL 从属性设置器创建的简单委托字典可以非常快(以前做过),但超出了这里的范围,因为 OP 没有提供任何代码。
标签: c# list datatable data-conversion poco