0

我在这里寻找最佳实践。对不起。我知道这是主观的,但这里有很多聪明人,所以应该有一些“非常好的”方法来做到这一点。

我有一个名为 Employee 的自定义对象。该对象具有七个属性,例如姓名、电话、电子邮件等。在我的 SQL 数据库中还有一个名为 tblEmployees 的表,其中有七列的标记有些相似。我的目标是将查询结果“转换”为 Employee 对象的通用列表。最好的方法是什么(最低开销,最快)?

我目前正在做的是我在网上看到的提议。我不喜欢它,因为我觉得它会减慢我的页面加载速度。通用列表使我的工作速度更快,但让我的客户付出代价让我感觉不好。

这就是我正在做的事情:

List<Employee> list = new List<Employee>();
DataSet ds = Employee.searchEmployees("Byron");
foreach (DataRow dr in ds.Tables[0].Rows)
{
   list.Add(new Employee(dr));
}

我有一个构造函数,它接受一个处理 'property = dr["column"]' 的数据行(如图所示)。

期待你的想法。

4

5 回答 5

1

你觉得这个过程的哪一部分很慢?据我所知,您的方法没有任何明显的性能瓶颈。

于 2009-11-09T15:00:48.500 回答
0

我建议使用像 Linq2SQL 或实体框架这样的 OR Mapper

于 2009-11-09T15:00:18.063 回答
0

建立列表的原因是在服务器端的函数之间传递。

与传递 DataSet 引用甚至是 DataTable 相比,传递列表有什么优势?

撇开这些想法不谈,您目前正在做的是建立列表的标准程序。您认为如何加快速度?通过不实例化 Employee 对象?然后,您将不得不放弃 Employee 对象,这可能会干扰您的实体建模。

于 2009-11-09T15:00:47.150 回答
0

简单地看一下代码,而不是看它是如何使用的,我会返回一个 IEnumerator 而不是一个列表。然后,您可以使用 yield return 语句,并且不会在列表中循环两次(一个用于填充,一个用于显示)。

所以...

protected IEnumerable<Employee> GetEmployees ()
{
   List<Employee> list = new List<Employee>();
   DataSet ds = Employee.searchEmployees("Byron");

   foreach (DataRow dr in ds.Tables[0].Rows)
   {
       yield return new Employee(dr);
   }
}
于 2009-11-09T15:05:03.773 回答
0

您现在正在做的事情需要在某个时候以一种或另一种方式完成,并且您不能真正比您描述的方式更快地完成它。但是您可以通过缓存数据来减少必须执行此操作的次数。

将客户列表存储在缓存中。例如,在应用程序启动时填充它。当某事更改客户记录时,您会更新缓存并将记录保存到数据库中。任何用户的任何读取都将进入缓存,而不是数据库。

这种方法通常比访问数据库的任何方法快一个数量级。

于 2009-11-09T15:28:04.460 回答