public void Minimize() { if (IsGroup) { CWordsAll.Clear(); CWordsAny.Clear(); CWordsNot.Clear(); MeasuresAll.Clear(); MeasuresAny.Clear(); Categories.Clear(); Children.ForAll(x => x.Minimize()); } }
public override bool Equals(object obj) { var other = obj as SearchOptions; if (other == null) { return(false); } return(GroupOperator == other.GroupOperator && SearchScope == other.SearchScope && MinAny == other.MinAny && WithConf == other.WithConf && PartialLoaded == other.PartialLoaded && CWordsAll.ScrambledEquals(other.CWordsAll) && CWordsAny.ScrambledEquals(other.CWordsAny) && CWordsNot.ScrambledEquals(other.CWordsNot) && MeasuresAll.ScrambledEquals(other.MeasuresAll) && MeasuresAny.ScrambledEquals(other.MeasuresAny) && Categories.ScrambledEquals(other.Categories) && Children.ScrambledEquals(other.Children) ); }
public override string ToString() { if (IsGroup) { string s = string.Empty; switch (GroupOperator) { case QueryGroupOperator.All: s = " и "; break; case QueryGroupOperator.Any: s = " или "; break; case QueryGroupOperator.NotAny: s = " не или "; break; } var childs = string.Join(s, Children); return("({0} в {1})".FormatStr(childs, SearchScope)); } var sb = new StringBuilder(); var alls = CWordsAll.Union <object>(MeasuresAll).ToList(); var anys = CWordsAny.Union <object>(MeasuresAny); if (anys.Count() <= MinAny) // фактически нужно всё из "хотя бы" { alls.AddRange(anys); // TODO убрать повторы - всё из (а) и хотя бы 2 из (а б) = (a и б) } if (alls.Any()) { if (alls.Count() > 1) { sb.Append("всё: "); } sb.Append(string.Join(", ", alls)); sb.Append("/"); } if (anys.Count() > MinAny) { sb.AppendFormat("хотя бы {0}: ", MinAny); sb.Append(string.Join(", ", anys)); sb.Append("/"); } if (CWordsNot.Any()) { if (CWordsNot.Count() > 1) { sb.AppendFormat("ни одного: "); } else { sb.AppendFormat("без "); } sb.Append(string.Join(", ", CWordsNot)); sb.Append("/"); } if (Categories.Any()) { sb.AppendFormat("разделы: "); sb.Append(string.Join(", ", Categories)); sb.Append("/"); } if (WithConf) { sb.Append("с отрицанием"); } return(sb.ToString().Trim('/')); }