Я читаю таблицу SQL из SQl SERVER, используя код C#.Словарь словарей в C#
Мои данные выглядит следующим образом:
ZOO Animal Mn Tu
NDS BAT 2 0
GOR BAT 3 1
VTZ BAT 1 2
MAS BAT 0 0
CST BAT 0 0
NDS CAT 4 0
GOR CAT 4 0
VTZ CAT 2 0
MAS CAT 7 0
CST CAT 1 0
NDS DOG 3 0
GOR DOG 2 0
VTZ DOG 1 0
MAS DOG 3 0
CST DOG 0 1
NDS EGG 7 0
GOR EGG 2 0
VTZ EGG 0 0
MAS EGG 0 0
CST EGG 4 0
я написал SQL команду чтения, и он идет
sql = "SELECT * FROM table";
OleDbCommand cmd = new OleDbCommand(sql, conn);
cmd.CommandTimeout = 600;
using (OleDbDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var location = reader.GetString(0).Trim();
var animal= reader.GetString(1).Trim();
var Monday= reader.GetValue(1).ToString().Trim();
var Tuesday= reader.GetValue(3).ToString().Trim();
}
}
Я создал словарь следующим образом:
private Dictionary<string, Dictionary<string, Dictionary<string, string>>> zooDict;
zooDict= new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();
Я бы идеально хотели бы иметь такую структуру:
{
NDS:
{
BAT:
{Mn: 2,
Tu: 2},
CAT:
{
MN: 4,
Tu: 0
}
DOG:
{
MN: 3,
Tu: 0
}
EGG:
{
MN: 7,
Tu: 0
}
}
GOR:
.
.
.
.
.
}
Я надеюсь преобразовать этот словарь в json-файл, но я не могу добавить ключи и значения в пустой словарь. Я пришел из фона python, где я могу использовать defaultdict для создания словаря словарей без использования ключевых ошибок.
Любые советы по созданию словаря будут чрезвычайно оценены.
if (!ZooDict.ContainsKey(location))
{
var catDict = new Dictionary<string, string>();
catDict.Add("Mon", Monday);
catDict.Add("Tue", Tuesday);
var AnimalDict = new Dictionary<string, Dictionary<string, string>>();
AnimalDict.Add(animal, catDict);
waitlistDict.Add(location, AnimalDict);
}
else
{
if (!waitlistDict[location].ContainsKey(animal))
{
var catDict = new Dictionary<string, string>();
catDict.Add("Mon", Monday);
catDict.Add("Tue", Tuesday);
var AnimalDict = new Dictionary<string, Dictionary<string, string>>();
AnimalDict.Add(animal, catDict);
waitlistDict[location] = AnimalDict;
}
else
{
if (waitlistDict[location][animal].ContainsKey("Mon"))
{
waitlistDict[location][animal]["Mon"] = Monday;
}
else
{
waitlistDict[location][animal]["Mon"] = Monday;
}
if (waitlistDict[location][animal].ContainsKey("Tue"))
{
waitlistDict[location][animal]["Tue"] = Tuesday;
}
else
{
waitlistDict[location][animal]["Tue"] = Tuesday;
}
}
}
Ваш подход является правильным. Но вам нужно создать самый внутренний экземпляр словаря. Используйте 'zooDict.Add (« ключ », новый словарь();' где 'key' ** ** bat ** и т. Д. –
Мне не удалось добавить внутренние словари, но теперь я думаю, что у меня есть. – Morpheus
Можете ли вы показать мне как вы добавляете внутренний словарь? Я могу помочь вам или исправить ваш подход к добавлению словаря. –