示例#1
0
 public void Minimize()
 {
     if (IsGroup)
     {
         CWordsAll.Clear();
         CWordsAny.Clear();
         CWordsNot.Clear();
         MeasuresAll.Clear();
         MeasuresAny.Clear();
         Categories.Clear();
         Children.ForAll(x => x.Minimize());
     }
 }
示例#2
0
        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)
                   );
        }
示例#3
0
        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('/'));
        }