簡體   English   中英

NET中的數據表與集合

[英]DataTable vs. Collection in .Net

我正在編寫一個程序,該程序需要讀取一組記錄,這些記錄描述了需要與之通信的設備的寄存器映射。 每個記錄將具有完整的字段,用於描述每個寄存器的屬性。

盡管我希望能夠在網格上顯示數據,但實際上我不需要在VB或C#程序中編輯或修改數據。 我想將數據存儲在CSV文件或XML文件中。 我需要使用戶能夠離線編輯數據,最好是在excel中。

我正在考慮使用DataTable或“ Register”對象的集合(由我定義)。

我對DataTable進行了原型設計,發現可以使用內置方法輕松讀取/寫入XML,並且可以輕松綁定到DataGridView。 即使我定義了唯一的primaty鍵列,也無法找到一種方法來獲取單個寄存器中的信息,而無需使用返回行集合的查詢。 從列中獲取值的語法也很復雜,盡管我在兩種情況下都可能會遺漏一些東西。

我很想使用我可以通過唯一鍵訪問的“注冊”對象的集合。 前面要多編碼一些,但總體上看似更干凈的解決方案。 我仍然可以在需要時使用LINQ來查詢寄存器子集的數據集,但也可以使用鍵值(如:Registers(keyValue).fieldName)來捕獲單個字段。

哪種方法可以解決這個問題?

有沒有辦法在不需要自定義代碼的情況下將XML讀/寫到Collection中?

可以使用String作為鍵來完成此操作嗎?

更新:聽起來好像共識是對寄存器對象的收集。 我感覺合理。 我一直以這種方式傾斜,並且由於沒有人指出任何可以簡化訪問單行的DataTable功能,因此看來Collection很顯然是要走的路。 感謝那些稱職的人。

我傾向於使用數據集。 最好使用對象和集合。 您的代碼將更具可維護性/可讀性,可組合性,可測試性和可重用性。

鑒於您可以對數據集執行查詢以返回特定行,因此您可能會發現將行轉換為對象的LINQ查詢可能就是您所需要的所有自定義代碼。

如果您有很多項(例如大於1000) Dictionary<string, Register>使用Dictionary<string, Register>進行查找是一個好主意。 否則,一個簡單的LINQ查詢就可以了。

這取決於您如何定義“干凈”。

通用集合可能比DataTable輕得多。 但另一方面,這對您來說似乎並不是一個太大的問題。 而且,除非您進行大量反思,否則您將不得不編寫一些代碼來讀取/寫入xml。

如果您使用密鑰,我也建議您(對於集合)使用字典。 這樣,您就可以收集原始數據,並且仍然可以通過字典中的鍵來標識每個條目。

我將使用對象集合,以便以后可以根據需要交換數據訪問權限。

您可以使用xml序列化器序列化類,並定義Serialize屬性或類似的東西(自從我這樣做以來已經有一段時間了,抱歉。) DataSet或DataTable可與XML一起使用。

DS和DT都具有ReadXml和WriteXml方法。 XML必須是預定義的格式,但是可以無縫運行。

否則,我個人喜歡收藏或字典; DS / DT可以,但是我喜歡自定義對象,LINQ則增加了一些功能。

HTH。

如果數據表很快並且不太可能以其他任何方式使用,我通常會使用數據表。 如果可以的話,我可以看到它正在演變為一個在應用程序中有自己用途的對象(例如您提到的Register Object)。

前面可能需要一些額外的代碼-但是如果您想根據單個行想做些什么,或者如果您想/需要添加某種排序,那么將來可以節省從數據表到集合的轉換。為該元素提供更多功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM