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); }
/// <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))); }
/// <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))); }
/// <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); }