public ICondition GetSearchKey(string keyword, string[] tags, out bool singleton)
        {
            singleton = false;

            DataSearchKey key;

            if (tags == null || tags.Length == 0)
            {
                key = this.GetSearchKey(new string[] { "Key" });
            }
            else
            {
                key = this.GetSearchKey(tags);
            }

            if (key == null)
            {
                return(null);
            }

            singleton = key.Singleton;

            var conditions = ConditionCollection.Or(key.ToCondition(keyword));

            return(conditions.Count == 1 ? conditions[0] : conditions);
        }
Beispiel #2
0
        /// <summary>
        /// 构建条件「或」集。
        /// </summary>
        /// <param name="criteria">指定构建条件「或」集的条件项。</param>
        /// <param name="conditions">指定构建条件「或」集的其他项集合。</param>
        /// <returns>返回构建的条件「或」集。</returns>
        public static ConditionCollection Or(this ICondition criteria, ConditionCollection conditions)
        {
            if (criteria == null)
            {
                return(conditions);
            }

            return(ConditionCollection.Or(Enumerate(criteria, conditions)));
        }
Beispiel #3
0
 /// <summary>
 /// 构建条件「或」集。
 /// </summary>
 /// <param name="criteria">指定构建条件「或」集的条件项。</param>
 /// <param name="conditions">指定构建条件「或」集的其他项集合。</param>
 /// <returns>返回构建的条件「或」集。</returns>
 public static ConditionCollection Or(this ICondition criteria, IEnumerable <ICondition> conditions)
 {
     return(ConditionCollection.Or(Enumerate(criteria, conditions)));
 }
Beispiel #4
0
 /// <summary>
 /// 构建条件「或」集。
 /// </summary>
 /// <param name="criteria">指定构建条件「或」集的条件项。</param>
 /// <param name="conditions">指定构建条件「或」集的其他项数组。</param>
 /// <returns>返回构建的条件「或」集。</returns>
 public static ConditionCollection Or(this ICondition criteria, params ICondition[] conditions)
 {
     return(ConditionCollection.Or(Enumerate(criteria, conditions)));
 }
        public virtual ICondition Convert(ConditionalConverterContext context)
        {
            //判断当前属性是否可以忽略
            if (this.IsIgnorable(context))
            {
                return(null);
            }

            ICondition result = null;

            void Fallback(Func <string, Condition> factory)
            {
                if (context.Names.Length == 1)
                {
                    result = factory(context.Names[0]);
                    return;
                }

                var criteria = ConditionCollection.Or();

                foreach (var name in context.Names)
                {
                    criteria.Add(factory(name));
                }

                result = criteria;
            }

            //确定是否为区间值,如果是则返回区间条件
            if (IsRange(context.Type) && Range.HasValue(context.Value, Fallback))
            {
                return(result);
            }

            var optor = context.Operator;

            //只有当属性没有指定运算符需要确定运算符
            if (optor == null)
            {
                optor = ConditionOperator.Equal;

                if (context.Type == typeof(string) && context.Value != null)
                {
                    optor = ConditionOperator.Like;
                }
                else if (typeof(IEnumerable).IsAssignableFrom(context.Type) || Zongsoft.Common.TypeExtension.IsAssignableFrom(typeof(IEnumerable <>), context.Type))
                {
                    optor = ConditionOperator.In;
                }
            }

            //如果当前属性只对应一个条件
            if (context.Names.Length == 1)
            {
                return(new Condition(context.Names[0], this.GetValue(optor, context.Value), optor.Value));
            }

            //当一个属性对应多个条件,则这些条件之间以“或”关系进行组合
            var conditions = ConditionCollection.Or();

            foreach (var name in context.Names)
            {
                conditions.Add(new Condition(name, this.GetValue(optor, context.Value), optor.Value));
            }

            return(conditions);
        }