DataTable的轻量级只读替代品,用于存储来自SqlDataReader的数据?

时间:2009-11-28 07:26:50

标签: .net datatable sqldatareader

我正在使用 SqlDataReader 从SQL Server读取数据。但有时我想将我的数据作为只读轻量级无连接对象缓存在内存中。我在BCL找不到任何选择。我是否需要编写自己的此类容器实现,或者是否可用?

我可以用什么方法以轻量级形式存储数据库中的数据?对我来说, DataTable 根本不是候选人。

编辑:

当我知道我选择的数据时,我可以轻松地使用LINQ将我的读者转换为List<T>或其他东西。但相反,我希望能够缓存我不知道结构的数据。

5 个答案:

答案 0 :(得分:3)

List<object[]>

似乎和你一样轻巧。

如果您想要它提供的更多功能(例如列名,数据绑定支持,排序,过滤),那么您可以派生/封装并添加该功能。

您的要求相当含糊。轻量级意味着什么? DataTable的不合适之处是什么?您需要DataTable提供哪些功能?

答案 1 :(得分:1)

创建自己的数据结构。

BCL不应该是所有人的所有事情。它由积木组成。 BCL包含创建自己的数据结构所需的构建块。

如果BCL包含解决每个问题的解决方案,那将是一个臃肿的混乱。并非每一项功能都应该是“现成的”,否则作为一名程序员,你将无法获得任何价值。

您似乎有相当明确的要求与“正常”使用模式不同。在DataSet和ORM之间,大多数项目相处得很好而没有您的要求所要求的功能。

答案 2 :(得分:1)

您可以使用List<Dictionary<String, Object>>,其中Dictionary键是列名,值是单元格值。

如果您有多行,则可以将列名分为List<String>和值List<List<Object>>(或Array)。

答案 3 :(得分:0)

最好的选择是拥有一个表示数据列的类型,然后只为每一行构造该类的实例,用读取器中的值填充其属性,并将实例存储在{{1结构。

类似的东西:

List<YourClass>

这基本上是任何ORM(对象关系映射器)的核心 - 使用最快的方式从数据库读取数据(DataReader)并从中构造.NET对象。

马克

答案 4 :(得分:0)

使用此:

List<string> Variable1 = new List<string>();
//Do something with the generic

string[] MyArray = Variable1.ToArray();

这是保存到内存中必须轻量级且高效的obj。