2016-11-08 3 views
-1

Ich lade Daten in einer Liste aus der Datenbank ab und möchte zwei ihrer Spalten in einer Hashtabelle speichern. Aber ich kann nur eine Zeile in die Hash-Tabelle einfügen, in der der Index 0 ist. Gibt es eine Möglichkeit, in die Hash-Tabelle einzufügen, ohne den Index zu berücksichtigen? Ich verwende gerade den folgenden Ansatz. Irgendwelche Vorschläge?Werte zu Hashtable hinzufügen, unabhängig vom Indexwert

foreach (StoreInfo store_info_id in StoreList) 
      { 

       Hashtable hashTable = new Hash table(); 
       hashTable.Add(StoreList[0].store_info_id, StoreList[0].RetailControlNumber); 
      } 
+2

Sie sollten nicht immer 'HashTable' verwendet werden. Sie sollten ein 'Dictionary' verwenden. – Servy

+0

@Servy Ich erwarte nicht viele Einträge in dieser Tabelle kann 3-4 jedes Mal sein so hashtable wäre eine gute Option gewesen, dachte ich. Aber ich bin offen für Vorschläge, dies mit dem Wörterbuch zu tun. – Programmermid

+0

Ihre Foreach ist völlig aus. Der Iteratorwert store_info_id wird niemals verwendet. –

Antwort

2

Drei Punkte:

  1. Hashtable ist nur Dictionary<object, object>, bevor es möglich war, Typ Argumente zu haben. Also, heute gibt es keinen Grund mehr, jemals Hashtable zu verwenden, außer wenn Sie mit altem Code interagieren, der zurückgeschrieben wurde, als Hashtable die einzige Option war.

  2. Wenn Sie zwei Spalten in den gleichen Eintrag im Wörterbuch setzen wollen, die richtige Art und Weise zu tun, ist eine Art erstellen Sie einen Eintrag im Wörterbuch zu vertreten:

    public class StoreRecord 
    { 
        public int StoreInfoID; 
        public string Column1; 
        public string Column2; 
    } 
    

    Dann verwendet eine Dictionary<int, StoreRecord>:

    var records = new Dictionary<int, StoreRecord>(); 
    
    foreach (var storeDatabaseRow in storeList) 
    { 
        var record = new StoreRecord(); 
    
        record.StoreInfoID = storeDatabaseRow.store_info_id; 
        record.Column1 = storeDatabaseRow.Column1; 
        record.Column2 = storeDatabaseRow.Column2; 
    
        records[record.StoreInfoID] = record; 
    } 
    
  3. Wenn Ihre Datenbank Datensätze leicht und getrennt ist, warum nicht nur auf den gesamten Datenbank-Eintrag aus dem Wörterbuch verweisen?

    var records = new Dictionary<int, StoreInfo>(); 
    
    foreach (var storeDatabaseRow in storeList) 
        records[storeDatabaseRow.store_info_id] = storeDatabaseRow; 
    

    oder unter Verwendung von LINQ:

    var records = storeList.ToDictionary(keySelector: row => row.store_info_id); 
    
Verwandte Themen