/// <summary>
 ///
 /// </summary>
 /// <param name="expr"></param>
 /// <param name="function"></param>
 /// <param name="obj"></param>
 /// <returns></returns>
 public static string GetMemberName(System.Linq.Expressions.Expression expr, out ColumnFunction function, out MemberExpression obj)
 {
     if (expr.NodeType == ExpressionType.Convert)
     {
         expr = ((UnaryExpression)expr).Operand;
     }
     if (expr is MemberExpression)
     {
         function = ColumnFunction.None;
         obj      = (MemberExpression)expr;
         return(obj.Member.Name);
     }
     if (expr is MethodCallExpression)
     {
         var e = (MethodCallExpression)expr;
         if (e.Method.Name == "ToLower" && e.Object is MemberExpression)
         {
             function = ColumnFunction.ToLower;
             obj      = (MemberExpression)e.Object;
             return(obj.Member.Name);
         }
         if (e.Method.Name == "ToUpper" && e.Object is MemberExpression)
         {
             function = ColumnFunction.ToUpper;
             obj      = (MemberExpression)e.Object;
             return(obj.Member.Name);
         }
         throw new Exception("暂时不支持的Lambda表达式写法!请使用经典写法!");
     }
     throw new Exception("暂时不支持的Lambda表达式写法!请使用经典写法!");
 }
Exemple #2
0
 public static string GetMemberName(Expression expr, out ColumnFunction function, out MemberExpression obj)
 {
     if (expr.NodeType == ExpressionType.Convert)
     {
         expr = ((UnaryExpression)expr).Operand;
     }
     if (expr is MemberExpression)
     {
         function = ColumnFunction.None;
         obj      = (MemberExpression)expr;
         return(GetColumnName(obj));
     }
     if (expr is MethodCallExpression)
     {
         var e = (MethodCallExpression)expr;
         if (e.Method.Name == "ToLower" && e.Object is MemberExpression)
         {
             function = ColumnFunction.ToLower;
             obj      = (MemberExpression)e.Object;
             return(GetColumnName(obj));
         }
         if (e.Method.Name == "ToUpper" && e.Object is MemberExpression)
         {
             function = ColumnFunction.ToUpper;
             obj      = (MemberExpression)e.Object;
             return(GetColumnName(obj));
         }
     }
     throw new LinqException("The expression must be 'Column op const' or 'Column op Column'");
 }
Exemple #3
0
        private IPropertyMapper getPropertyMapper(Expression expr, out ColumnFunction function, out MemberExpression obj)
        {
            if (expr.NodeType == ExpressionType.Convert)
            {
                expr = ((UnaryExpression)expr).Operand;
            }

            if (expr is MemberExpression)
            {
                function = ColumnFunction.None;
                obj      = (MemberExpression)expr;
                return(getPropertyMapper(obj));
            }

            if (expr is MethodCallExpression)
            {
                var e = (MethodCallExpression)expr;
                if (e.Method.Name == "ToLower" && e.Object is MemberExpression)
                {
                    function = ColumnFunction.ToLower;
                    obj      = (MemberExpression)e.Object;
                    return(getPropertyMapper(obj));
                }
                if (e.Method.Name == "ToUpper" && e.Object is MemberExpression)
                {
                    function = ColumnFunction.ToUpper;
                    obj      = (MemberExpression)e.Object;
                    return(getPropertyMapper(obj));
                }
            }
            throw new MapleException("The expression must be 'Column op const' or 'Column op Column'");
        }
Exemple #4
0
 public KeyValueClause(string key, object value, CompareOpration co, ColumnFunction function)
     : this(new KeyValue(key, value), co)
 {
     this.function = function;
 }
Exemple #5
0
        /// <summary>
        /// 生成SQL片段和参数
        /// </summary>
        /// <param name="propertyMapper"></param>
        /// <param name="function"></param>
        /// <param name="co"></param>
        /// <param name="value"></param>
        /// <param name="dbTranslator"></param>
        /// <param name="sBuilder"></param>
        /// <param name="dpc"></param>
        private void buildSqlAndDataParameter(IPropertyMapper propertyMapper, ColumnFunction function, CompareOpration co, object value,
                                              IDbTranslator dbTranslator, StringBuilder sBuilder, DataParameterCollection dpc)
        {
            //获取参数名称
            string strKey = dbTranslator.Quote(string.Format("{0}_{1}", propertyMapper.ColumnName, dpc.Count));

            //拼接SQL 1
            switch (function)
            {
            //处理函数
            case ColumnFunction.ToLower:
                sBuilder.Append(string.Format("LOWER({0})", propertyMapper.ColumnName));
                break;

            case ColumnFunction.ToUpper:
                sBuilder.Append(string.Format("UPPER({0})", propertyMapper.ColumnName));
                break;

            default:
                sBuilder.Append(propertyMapper.ColumnName);
                break;
            }
            //拼接SQL 2
            if (value == null)
            {
                if (co == CompareOpration.Equal)
                {
                    sBuilder.Append(" IS NULL ");
                }
                else if (co == CompareOpration.NotEqual)
                {
                    sBuilder.Append(" IS NOT NULL ");
                }
                else
                {
                    throw new MapleException("该操作不支持!NULL value only supported Equal and NotEqual!");
                }
            }
            else
            {
                switch (co)
                {
                case CompareOpration.Equal:
                    sBuilder.Append(" = ");
                    sBuilder.Append(dbTranslator.QuoteParameter(strKey));
                    break;

                case CompareOpration.GreatOrEqual:
                    sBuilder.Append(" >= ");
                    sBuilder.Append(dbTranslator.QuoteParameter(strKey));
                    break;

                case CompareOpration.GreatThan:
                    sBuilder.Append(" > ");
                    sBuilder.Append(dbTranslator.QuoteParameter(strKey));
                    break;

                case CompareOpration.LessOrEqual:
                    sBuilder.Append(" <= ");
                    sBuilder.Append(dbTranslator.QuoteParameter(strKey));
                    break;

                case CompareOpration.LessThan:
                    sBuilder.Append(" < ");
                    sBuilder.Append(dbTranslator.QuoteParameter(strKey));
                    break;

                case CompareOpration.Like:
                    sBuilder.Append(" LIKE ");
                    sBuilder.Append(dbTranslator.QuoteParameter(strKey));
                    value = string.Format("%{0}%", value);
                    break;

                case CompareOpration.StartsWith:
                    sBuilder.Append(" LIKE ");
                    sBuilder.Append(dbTranslator.QuoteParameter(strKey));
                    value = string.Format("{0}%", value);
                    break;

                case CompareOpration.EndsWith:
                    sBuilder.Append(" LIKE ");
                    sBuilder.Append(dbTranslator.QuoteParameter(strKey));
                    value = string.Format("%{0}", value);
                    break;

                case CompareOpration.NotEqual:
                    sBuilder.Append(" <> ");
                    sBuilder.Append(dbTranslator.QuoteParameter(strKey));
                    break;

                default:
                    throw new MapleException("该操作不支持!CompareOpration = " + co);
                }

                //添加查询参数
                dpc.Add(new DataParameter(strKey, value, propertyMapper.DbType, propertyMapper.Size, ParameterDirection.Input));
            }
        }
Exemple #6
0
        public KeyValueClause(string key, object value, CompareOpration co, ColumnFunction function)
			: this(new KeyValue(key, value), co)
		{
            this.function = function;
		}