【发布时间】:2015-02-05 17:56:37
【问题描述】:
我只是想知道是否有更快或更有效的方法将 DataTable 转换为对象?
我目前使用的方法是这样的:
public class Job {
int JobID { get; set; }
decimal JobCost { get; set; }
Job(DataRow dr)
{
ID = Convert.ToInt32(dr["ID"]);
if(dr["JobCost "] != DBNull.Value)
JobCost = Convert.ToDecimal(dr["DelAmt"]);
}
}
public static List<Job> FillObjects()
{
DataTable dtJobs = JobController.GetJobTable();
foreach (DataRow dr in dtJobs.Rows)
{
jobs.Add(new Job(dr));
}
return jobs
}
这是一个明显简化的示例,但是由于数据表中有很多行并且对象中有很多属性,这会变得相当慢。有没有更快或更有效的方法来做这样的事情?
提前感谢您的任何回复!
【问题讨论】:
-
想必数据表中的项目实际上是整数和小数。你应该铸造他们,而不是打电话给
Convert。强制转换远比操作更简单。除此之外,除了遍历每一行,提取每一个值,并将其分配给对象的字段之外,真的别无选择。 -
这些项目主要是整数和小数,但数据库类型和代码中的变量类型之间并不总是有确切的关系。 (免责声明:这不是我的代码,我继承了系统)。有些数据库字段是字符串,需要转换成整数或日期时间等。
-
那你真的应该解决这个问题了;将数字作为字符串存储在数据库中会导致许多不同类型的问题,其中之一当然是您的所有数据库查询都需要花费时间来解析所有查询结果。
-
我同意。不幸的是,那些对管理层来说很难卖。他们非常有“如果它没有坏掉”的心态。再次感谢。
标签: c# asp.net system.data