/// <summary> /// Объединяет два списка параметров и возвращает результат /// </summary> public TParams_EMPTY MergeParams(TParams_EMPTY value) { if (value == null) return this; foreach (KeyValuePair<String, Object> param in value.FData) { AddParam(param.Key, param.Value); } return this; }
/// <summary> /// Определяет, равны ли списки параметров /// </summary> /// <param name="arg"></param> /// <returns>Список параметров, который требуется сравнить с текущим</returns> public bool Equals(TParams_EMPTY arg) { if (arg == null) return false; if (FData.Count != arg.FData.Count) return false; foreach (KeyValuePair<String, Object> param in FData) { if (!arg.FData.ContainsKey(param.Key)) return false; if (!EqualValues(arg.FData[param.Key], param.Value)) return false; } return true; }
/// <summary> /// Проверяет пересечение параметров, если общие параметры равны, то истина иначе ложь /// </summary> /// <param name="value"></param> /// <returns></returns> public Boolean Crossing(TParams_EMPTY value) { // -=MD=-: Я посчитал что правильно вернуть фальс // if (IsNull || value.IsNull) return false; if (value == null) return true; foreach (KeyValuePair<String, Object> param in value.FData) { if (FData.ContainsKey(param.Key) && !EqualValues(FData[param.Key], param.Value)) return false; } return true; }
/// <summary> /// Возвращает пересечение двух списков параметров /// </summary> /// <param name="value"></param> /// <returns></returns> public TParams_EMPTY CrossParams(TParams_EMPTY value) { if (value == null) { Clear(); return this; }; List<String> keys = new List<String>(); foreach (KeyValuePair<String, Object> param in value.FData) { if (FData.ContainsKey(param.Key) && EqualValues(FData[param.Key], param.Value)) keys.Add(param.Key); } for (Int32 i = FData.Count - 1; i >= 0; i--) { if (keys.IndexOf(FData.Keys[i]) < 0) FData.RemoveAt(i); } return this; }
/// <summary> /// Возвращает значение параметра типа TParams_EMPTY /// </summary> public TParams_EMPTY AsParams(SqlString name) { if (!FData.ContainsKey(name.Value)) return null; Object value = FData[name.Value]; if (value is TParams_EMPTY) return (TParams_EMPTY)value; else if (value is SqlString) { TParams_EMPTY result = (TParams_EMPTY)System.Activator.CreateInstance(this.GetType()); result.FromString((String)(SqlString)value); return result; } else if (value is SqlXml) { TParams_EMPTY result = new TParams_EMPTY(); result.ReadXml((value as SqlXml).CreateReader()); return result; } else throw new Exception(String.Format("Не удалось сконвертировать значение '{0}' параметра '{1}' в тип {2}", ValueToString(value, ValueDbStyle.Text), name.Value, this.GetType().Name)); }