Пример #1
0
        /// <summary>
        /// Строит подготовительный SQL-код для критерия фильтрации - строка поиска.
        /// </summary>
        /// <param name="context">контекст для атрибута критерия фильтрации.</param>
        /// <returns>
        /// SQL-код для критерия фильтрации, который должен быть выполнен перед основным запросом
        /// </returns>
        public override string BuildPrecode(FilterOptionAttributeContext context)
        {
            string value = ((context.Value == null) ? String.Empty : context.Value.ToString()).SplitWords();

            if (String.IsNullOrEmpty(value))
            {
                return(null);
            }

            var list = value.Split(' ');

            var res = string.Empty;

            for (int i = 0; i < list.Count(); i++)
            {
                context.Context.Declarations.Add(@"
				-- Слово для поиска в поле: {0}_{1}
				DECLARE @СловоДляПоискаПоПолю_{0}_{1} varchar(200)
				"                .FormatWith(FieldName, i + 1));

                res += @"
				SET @СловоДляПоискаПоПолю_{0}_{3} = '%'+{1}(Инвентаризация.dbo.fn_ReplaceKeySymbols('{2}'))+'%'
				"                .FormatWith(FieldName, UseConvertionToRL ? "Инвентаризация.dbo.fn_ReplaceRusLat" : String.Empty, list[i].Replace("'", "''"), i + 1);
            }

            return(res);
        }
Пример #2
0
        /// <summary>
        /// Строит предикат - SQL-код условия фильтрации в конструкции WHERE.
        /// </summary>
        /// <param name="context">контекст для атрибута критерия фильтрации.</param>
        /// <returns>
        /// SQL-код условия фильтрации в конструкции WHERE
        /// </returns>
        public override string BuildPredicate(FilterOptionAttributeContext context)
        {
            var value = ((context.Value == null) ? String.Empty : context.Value.ToString()).SplitWords();

            if (value == null || value.Length == 0)
            {
                return(null);
            }

            var list = value.Split(' ');
            //string concatExpression = String.Empty;

            //if (!String.IsNullOrEmpty(ConcatinationExpression))
            //{
            //	concatExpression = " + " + ConcatinationExpression;
            //}

            int checkID = 0;

            if (list.Length == 1)
            {
                int.TryParse(list[0], out checkID);
            }

            string res = string.Empty;

            switch (list.Length)
            {
            case 1:
                if (checkID > 0)
                {
                    res += "T0.КодСотрудника = {0} OR ".FormatWith(checkID);
                }
                res += "(T0.ФамилияRL LIKE @СловоДляПоискаПоПолю_{0}_1 OR T0.LastName LIKE @СловоДляПоискаПоПолю_{0}_1 OR T0.ИмяRL LIKE @СловоДляПоискаПоПолю_{0}_1 OR T0.FirstName LIKE @СловоДляПоискаПоПолю_{0}_1)".FormatWith(FieldName);
                break;

            case 2:
                res += @"(
( (T0.ФамилияRL LIKE @СловоДляПоискаПоПолю_{0}_1 OR T0.LastName LIKE @СловоДляПоискаПоПолю_{0}_1) AND (T0.ИмяRL LIKE @СловоДляПоискаПоПолю_{0}_2 OR T0.FirstName LIKE @СловоДляПоискаПоПолю_{0}_2) ) OR
( (T0.ИмяRL LIKE @СловоДляПоискаПоПолю_{0}_1 OR T0.FirstName LIKE @СловоДляПоискаПоПолю_{0}_1) AND (T0.ФамилияRL LIKE @СловоДляПоискаПоПолю_{0}_2 OR T0.LastName LIKE @СловоДляПоискаПоПолю_{0}_2) ) OR
( (T0.ИмяRL LIKE @СловоДляПоискаПоПолю_{0}_1 OR T0.FirstName LIKE @СловоДляПоискаПоПолю_{0}_1) AND (T0.ОтчествоRL LIKE @СловоДляПоискаПоПолю_{0}_2 OR T0.MiddleName LIKE @СловоДляПоискаПоПолю_{0}_2) ) )".FormatWith(FieldName);
                break;

            case 3:
                res += @"(
( (T0.ФамилияRL LIKE @СловоДляПоискаПоПолю_{0}_1 OR T0.LastName LIKE @СловоДляПоискаПоПолю_{0}_1) AND (T0.ИмяRL LIKE @СловоДляПоискаПоПолю_{0}_2 OR T0.FirstName LIKE @СловоДляПоискаПоПолю_{0}_2) AND (T0.ОтчествоRL LIKE @СловоДляПоискаПоПолю_{0}_3 OR T0.MiddleName LIKE @СловоДляПоискаПоПолю_{0}_3) ) OR
( (T0.ИмяRL LIKE @СловоДляПоискаПоПолю_{0}_1 OR T0.FirstName LIKE @СловоДляПоискаПоПолю_{0}_1) AND (T0.ОтчествоRL LIKE @СловоДляПоискаПоПолю_{0}_2 OR T0.MiddleName LIKE @СловоДляПоискаПоПолю_{0}_2) AND (T0.ФамилияRL LIKE @СловоДляПоискаПоПолю_{0}_3 OR T0.LastName LIKE @СловоДляПоискаПоПолю_{0}_3) ) )".FormatWith(FieldName);
                break;
            }

            return(res);
        }