DataTable与.Net中的集合

时间:2010-04-22 00:56:14

标签: c# vb.net

我正在编写一个程序,需要读取一组描述我需要与之通信的设备的寄存器映射的记录。每条记录都有一个描述每个寄存器属性的字段。

我真的不需要编辑或修改我的VB或C#程序中的数据,尽管我希望能够在网格上显示数据。我想将数据存储在CSV文件中,或者可能是XML文件中。我需要让用户能够离线编辑数据,最好是excel。

我正在考虑使用DataTable或“Register”对象的集合(我将定义)。

我对DataTable进行了原型设计,发现我可以使用内置方法轻松读/写XML,并且可以轻松地绑定到DataGridView。即使我定义了一个唯一的primaty键列,我也无法在不使用返回行集合的查询的情况下找到在单个寄存器上检索信息的方法。从列中获取值的语法也很复杂,但我可能在两个方面都缺少某些东西。

我很想使用我可以通过唯一键访问的“Register”对象集合。它会在前面编写一些代码,但整体上似乎是一个更清晰的解决方案。在我需要时,我仍然可以使用LINQ to dataset来查询寄存器的子集,但也可以使用键值来获取单个字段,如下所示:Registers(keyValue).fieldName)。

哪种方法更清晰?

有没有办法在不需要自定义代码的情况下将XML读/写到集合中?

这可以使用字符串作为密钥来完成吗?

更新:听起来就是对注册对象集合的共识。我感觉合理。我倾向于这种方式,因为没有人指出任何可以简化单行访问的DataTable功能,看起来收集显然是要走的路。感谢那些称重的人。

5 个答案:

答案 0 :(得分:4)

我倾向于来使用数据集。使用对象和集合会更好。您的代码将更易于维护/可读,可组合,可测试和可重复使用的。

鉴于您可以对数据集执行查询以返回特定行,您可能会发现将行转换为对象的LINQ查询可能是您需要的所有自定义代码。

如果您有大量项目(例如大于1000),使用Dictionary<string, Register>进行查找是个好主意。否则一个简单的LINQ查询应该没问题。

答案 1 :(得分:1)

这取决于你如何定义'干净'。

通用集合可能比DataTable更轻量级。但另一方面,对你来说这似乎不是一个问题。除非你进行大量反思,否则你必须编写一些代码来读/写xml。

如果您使用密钥,我还建议(在集合的情况下)使用字典。这样您就可以获得原始数据的集合,并且仍然可以通过字典中的键识别每个条目。

答案 2 :(得分:0)

我会选择对象集合,以便您可以在以后更换数据访问权限。

答案 3 :(得分:0)

您可以使用xml序列化程序序列化类并定义Serialize属性或类似的东西(自从我这样做以来已经有一段时间了,抱歉模糊不清)。 DataSet或DataTable适用于XML。

DS和DT都有ReadXml和WriteXml方法。 XML必须是预定义的格式,但它可以无缝地工作。

否则,我个人喜欢收藏或词典; DS / DT没问题,但我喜欢自定义对象,LINQ增加了一些功能。

HTH。

答案 4 :(得分:0)

如果它快速且不太可能以任何其他方式使用,我通常会使用数据表。如果这是我可以看到的变成一个在app中有自己用途的对象(比如你提到的Register Object)。

预先可能会有一些额外的代码 - 但如果您根据单个行提出想要做的事情,或者如果您想要/需要,它可以节省将来从数据表转换到集合的过程在未来为该元素添加某种额外功能。