从datareader填充对象

时间:2009-12-29 09:42:42

标签: c#

我在面试中被问了一个问题。如何使用从datareader返回的数据填充自定义对象。

我的回答是使用datareader.read(),创建自定义对象的实例并使用datareader值设置属性。

面试官并不高兴。他说,如果我有数百万条记录,那么使用我的方法填写这些记录将非常缓慢。他让我建议其他方式。

除此之外还有其他方法。请评论。

4 个答案:

答案 0 :(得分:5)

您的方法完全有效并且在许多地方使用。现在,如果你有数百万条记录,你可能不会想要填充内存中的对象。但我想这将取决于你将如何处理对象。如果面试官说他不想绕过这些记录,那么这就违背了数据读者的目的。

答案 1 :(得分:1)

您是否建议将业务对象存储在某种内存数据结构中?如果是这样,也许采访者对一个解决方案感兴趣,在这个解决方案中,对象在生成器方法中实例化并使用yield return返回给消费者?

答案 2 :(得分:1)

这实际上取决于场景 - 那里没有足够的要求,但有些想法:

  • 迭代器块(yield return)避免必须缓冲所有数据
  • 如果您正在为每种类型编写特定的C#代码,那么这很好 - 但如果性能至关重要,则不应使用(原始)反射;一个动态方法(ILGenerator等,或Expression),或类似HyperDescriptor之类的东西可以从反射中剔除
  • 如果他们想要一个集合,那么集合可以本身在你使用它时延迟加载,但除非你的TSQL返回,否则你将无法提前获得Count第一
  • 他可能会争辩说构造函数可能比使用单个属性更快,但坦率地说我怀疑他没有描述它;设置属性与字段(在ctor中)之间很少会出现重要的差异。事实上,我正在准备一篇关于这个主题的博客文章...

答案 3 :(得分:0)

我对这个问题的直接回答是,“你如何使用DataReader返回的数据填充自定义对象?”是,“通过使用组合。”显然,面试官认为他在问一个不同而且不那么有趣的问题。