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