正在加载特定类型的字典值

本文关键字:字典 类型 加载 | 更新日期: 2023-09-27 18:28:16

如何在读取不同的数据表调用时加载具有特定类型成员的字典?

  1. 我正在使用方法HashSet.ToDictionary填充Dictionary
  2. 然后我调用DB并希望加载对象(属性Value1)
  3. 最后,我将调用另一个DB,查找并预填充现有对象的Value2属性
HashSet < string > hashset = new HashSet < string > ();
Dictionary < string, CustomeObject > dictionary = new Dictionary < string, CustomeObject > ();
dictionary = hashset.ToDictionary(h => h, h => (CustomeObject) null);
while (firstreader.Read()) {
  if (dictionary.ContainsKey(firstreader.GetValue(1).ToString())) {
    dictionary[firstreader.GetValue(1).ToString()] = new CustomeObject() {
      Key = firstreader.GetValue(1).ToString(),
        Value1 = firstreader.GetValue(2).ToString(),
        Value2 = null
    };
  }
}

while (secondreader.Read()) {
  if (dictionary.ContainsKey(secondreader.GetValue(1).ToString())) {
    dictionary[secondreader.GetValue(1).ToString()] = new CustomeObject() {
      Key = "", //Persist the value from previous load
        Value1 = secondreader.GetValue(2).ToString(),
        Value2 = null;
    };
  }
}

正在加载特定类型的字典值

当您在遍历两个读取器的同时写入字典时,您正在实例化两个读取器中的一个新对象,并将其分配给字典值。因此,您在读取firstreader时创建对象,然后在读取secondreader时覆盖对象。

阅读secondreader时需要做的是检查dictionary值是否为null。如果不是,那么只写Value2。

while (secondreader.Read()) {
  var myReadValue = secondreader.GetValue(1).ToString();
  if (dictionary.ContainsKey(myReadValue)) {
    if(dictionary[myReadValue] != null) {
      dictionary[myReadValue].Value2 = secondreader.GetValue(2).ToString();
    }
  }
}