//Добавляет все элементы из другого словаря, replace - заменять если ключи совпадают public void AddDic(DicS <T> dicI2, bool replace = true) { foreach (var d in dicI2.Dic) { Add(d.Key, d.Value, replace); } }
//Переводит строку со свойствами в словарь DicS public static DicS <string> ToPropertyDicS(this string str, string separator = ";") { var res = new DicS <string>(); try { if (!str.IsEmpty()) { string[] st = str.Split(new[] { separator }, StringSplitOptions.RemoveEmptyEntries); foreach (var s in st) { int p = s.IndexOf("="); //res.Add(s.Substring(0, p), s.Substring(p + 1)); string key = ""; for (int i = 0; i < p; i++) { key += s[i]; } string val = ""; for (int i = p + 1; i < s.Length; i++) { val += s[i]; } res.Add(key, val); } } } catch { } return(res); }
//Добавляет все элементы из другого словаря, replace - заменять если ключи совпадают public DicS <T> AddDic(DicS <T> dicI2, bool replace = true) { foreach (var d in dicI2.Dic) { Add(d.Key, d.Value, replace); } return(this); }
public static bool GetBool(this DicS <string> dic, string key) { if (dic == null || !dic.ContainsKey(key)) { return(false); } string s = dic[key].ToUpper(); return(s == "TRUE" || s == "ДА"); }
public static int GetInt(this DicS <string> dic, string key, int defval = 0) { int res; if (dic == null || !dic.ContainsKey(key) || !int.TryParse(dic[key], out res)) { return(defval); } return(res); }
//Сохранение объектов из словаря в таблицу //Старые записи удаляются, только если их нет в словаре, иначе просто обновляются public static void SaveDicToTable <T>(string dbFile, //dbFile - файл базы данных DicS <T> dic, //Словарь string tabl, //Имя таблицы string keyField = "Code", //keyField - ключевое поле string keyField2 = "", //если ключ по двум полям, то второе ключевое поле string delField = "Del") //delField - поле отметки для удаления, where T : ISaveToRecDao { using (var db = new DaoDb(dbFile)) db.SaveDicToTable(dic, tabl, keyField, keyField2, delField); }
//То же самое, но база данных не задается public void SaveDicToTable <T>(DicS <T> dic, string tabl, string keyField = "Code", string keyField2 = "", string delField = "Del") where T : ISaveToRecDao { var old = new SetS(); var add = new SetS(); using (var rec = new RecDao(this, tabl, RecordsetTypeEnum.dbOpenTable)) while (rec.Read()) { var code = rec.GetString(keyField); if (!keyField2.IsEmpty()) { code += "." + rec.GetString(keyField2); } if (dic.ContainsKey(code)) { old.Add(code); } else { rec.Put(delField, true); } } Execute("DELETE * FROM " + tabl + " WHERE " + delField + "=True"); foreach (var ap in dic.Keys) { if (!old.Contains(ap)) { add.Add(ap); } } using (var rec = new RecDao(this, tabl, RecordsetTypeEnum.dbOpenTable)) { while (rec.Read()) { dic[rec.GetString(keyField) + (keyField2.IsEmpty() ? "" : ("." + rec.GetString(keyField2)))].ToRecordset(rec, false); } foreach (var p in add.Keys) { dic[p].ToRecordset(rec, true); } } }
//Переводит строку со свойствами в словарь DicS public static DicS <string> ToPropertyDicS(this string str, string separator = ";") { var res = new DicS <string>(); try { if (!str.IsEmpty()) { string[] st = str.Split(new[] { separator }, StringSplitOptions.RemoveEmptyEntries); foreach (var s in st) { int p = s.IndexOf("=", StringComparison.Ordinal); res.Add(s.Substring(0, p), s.Substring(p + 1)); } } } catch { } return(res); }
//Сохранение объектов из словаря dic в таблицу tabl, keyField - ключевое поле, если ключ по двум полям, то keyField2 - второе ключевое поле //delField - поле отметки для удаления, dbFile - файл базы данных //Старые записи удаляются, только если их нет в словаре, иначе просто обновляются public static void SaveDicToTable <T>(string dbFile, DicS <T> dic, string tabl, string keyField = "Code", string keyField2 = "", string delField = "Del") where T : ISaveToRecDao { using (var db = new DaoDb(dbFile)) db.SaveDicToTable(dic, tabl, keyField, keyField2, delField); }
public static string ToPropertyString(this DicS <string> dic, string separator = ";") { return(dic.Dic.ToPropertyString(separator)); }