/// <summary> /// 生成一个查询项 /// </summary> /// <param name="field">相关的属性(字段)</param> /// <param name="paramName">参数名,仅作为记录</param> /// <param name="oprater">操作方法</param> internal QueryParamProviderItem(Expression <Func <T, TKey> > field, Expression <Func <TKey, bool> > when, string paramName, QueryParamProviderOprater oprater) { Field = field; When = when; ParamName = paramName; Oprater = oprater; }
/// <summary> /// 添加一个参数查询项 /// </summary> /// <typeparam name="TKey">参数字段类型</typeparam> /// <param name="field">参数字段 请统一表达式参数名</param> /// <param name="oprater">比较符号 默认为相等</param> /// <param name="when">参数生效条件 默认为不为默认值(string 的默认值为 不为null和string.Empty)</param> /// <param name="paramName">参数在键值对里的名称 默认为和字段名称一致</param> public void AddItem <TKey>(Expression <Func <T, TKey> > field, QueryParamProviderOprater oprater = QueryParamProviderOprater.Equal, Expression <Func <TKey, bool> > when = null, string paramName = null) { if (paramName == null) { paramName = ((MemberExpression)field.Body).Member.Name; } if (when == null) { var vvv = default(TKey); ParameterExpression para = Expression.Parameter(typeof(TKey)); when = Expression.Lambda <Func <TKey, bool> >(Expression.NotEqual(para, Expression.Constant(vvv)), para) as Expression <Func <TKey, bool> >; //////////////////////////////////对string 的默认值进行处理 if (typeof(TKey) == typeof(string)) { when = when.And(Expression.Lambda <Func <TKey, bool> >(Expression.NotEqual(para, Expression.Constant(string.Empty)), para)); } } QueryParamProviderItem <T, TKey> item = new QueryParamProviderItem <T, TKey>(field, when, paramName, oprater); Items.Add(item); }