我正在使用 SqlDataReader 从SQL Server读取数据。但有时我想将我的数据作为只读轻量级无连接对象缓存在内存中。我在BCL找不到任何选择。我是否需要编写自己的此类容器实现,或者是否可用?
我可以用什么方法以轻量级形式存储数据库中的数据?对我来说, DataTable 根本不是候选人。
编辑:
当我知道我选择的数据时,我可以轻松地使用LINQ将我的读者转换为List<T>
或其他东西。但相反,我希望能够缓存我不知道结构的数据。
答案 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。