是否有更好的方法从SQL DataAdapter填充通用List?

时间:2009-04-11 20:08:03

标签: vb.net generics data-binding activerecord

我有一个使用Active Record进行数据检索的现有应用程序。它是在VB.NET中(我第一次做VB.NET;我通常在C#中工作)。我正在构建一个返回对象List(Of T)的方法。

当前模式使用SQLDataAdapter填充数据表。当我填充数据表时,我可以将记录添加到List(Of T),但是有更好的方法可以做到这一点。

有什么想法吗?我没有结婚使用SQLDataAdapter,如果有更好的方法可以避免它......

1 个答案:

答案 0 :(得分:3)

由于你还没有任何回应......

我自己没有使用Active Record,所以我不知道在什么时候会产生任何差异但是让我觉得阅读DataTable a { {1}}在某种程度上重复了一些事情。

如何从List<T>填充List<T>呢?在使用SqlDataReader移动结果时,从当前行创建一个新对象并将其添加到列表中。如果你需要为各种不同的类型做这件事,我会写一个通用的方法,按照以下方式:

Read()

然后,您可以使用lambda表达式或匿名方法实现转换器。

或者你可以让扩展方法定位命令而不是public static List<T> ToList<T>(this SqlDataReader reader, Func<SqlDataReader, T> rowConverter) { List<T> ret = new List<T>(); while (reader.Read()) { ret.Add(rowConverter(reader)); } return ret; } - 它可以处理调用SqlDataReader,转换每一行然后处理读者。

(这是一个有点奇怪的签名,因为ExecuteReader代表迭代器当前行;只是API的一个怪癖。)

我可能错过了更深层次的东西 - 如果这没有帮助,你能解释一下原因吗,或许作为一个问题编辑?