Beispiel #1
0
        protected override ISqlBuilder Where(UnaryExpression expression, ISqlBuilder sqlBuilder)
        {
            //m=>!m.IsAmdin
            if (expression.NodeType == ExpressionType.Not && expression.Operand is MemberExpression && expression.Type == typeof(bool))
            {
                var memberExp = expression.Operand as MemberExpression;

                var tableAliax = GetTableAlias(memberExp, sqlBuilder);

                var columnName   = memberExp.Member.Name;
                var sqlParamName = sqlBuilder.SetSqlParameter(0);

                sqlBuilder.AppendWhereSql($"{tableAliax}{sqlBuilder.Formate(columnName)} ");
                sqlBuilder.AppendWhereSql("= ");
                sqlBuilder.AppendWhereSql($"{sqlParamName} ");
            }
            //DateTime.Now
            else if (expression.NodeType == ExpressionType.Convert)
            {
                var value        = TryGetExpreesionValue(expression);
                var sqlParamName = sqlBuilder.SetSqlParameter(value);
                sqlBuilder.AppendWhereSql($"{sqlParamName} ");
            }
            else
            {
                SqlVistorProvider.Where(expression.Operand, sqlBuilder);
            }
            return(sqlBuilder);
        }
Beispiel #2
0
        protected override ISqlBuilder In(MemberExpression expression, ISqlBuilder sqlBuilder)
        {
            var field = expression.Member as FieldInfo;

            if (field != null)
            {
                object val = field.GetValue(((ConstantExpression)expression.Expression).Value);

                if (val != null)
                {
                    var         ins   = new List <string>();
                    IEnumerable array = val as IEnumerable;
                    foreach (var item in array)
                    {
                        if (field.FieldType.Name == "String[]" || field.FieldType == typeof(List <string>))
                        {
                            ins.Add($"'{item}'");
                        }
                        else
                        {
                            ins.Add($"{item}");
                        }
                    }

                    if (ins.Any())
                    {
                        sqlBuilder.AppendWhereSql($"({string.Join(",", ins)})");
                    }
                }
            }
            return(sqlBuilder);
        }
Beispiel #3
0
        protected override ISqlBuilder Where(MemberExpression expression, ISqlBuilder sqlBuilder)
        {
            var tableAlias = GetTableAlias(expression, sqlBuilder);

            sqlBuilder.AppendWhereSql($"{tableAlias}{sqlBuilder.Formate(expression.Member.Name)} ");
            return(sqlBuilder);
        }
        protected override ISqlBuilder In(ListInitExpression expression, ISqlBuilder sqlBuilder)
        {
            var ins = new List <string>();

            foreach (var expressionInit in expression.Initializers)
            {
                foreach (var expressionItem in expressionInit.Arguments)
                {
                    if (expressionItem is ConstantExpression)
                    {
                        var constantExp = expressionItem as ConstantExpression;
                        if (constantExp.Type.Name == "String")
                        {
                            ins.Add($"'{constantExp.Value}'");
                        }
                        else
                        {
                            ins.Add($"{constantExp.Value}");
                        }
                    }
                }
            }
            sqlBuilder.AppendWhereSql($"({string.Join(",", ins)}) ");
            return(sqlBuilder);
        }
        protected override ISqlBuilder Where(ConstantExpression expression, ISqlBuilder sqlBuilder)
        {
            var sqlParamName = sqlBuilder.SetSqlParameter(expression.Value);

            sqlBuilder.AppendWhereSql($"{sqlParamName} ");
            return(sqlBuilder);
        }
Beispiel #6
0
        protected override ISqlBuilder Delete(MethodCallExpression expression, ISqlBuilder sqlBuilder)
        {
            var value        = TryGetExpreesionValue(expression);
            var sqlParamName = sqlBuilder.SetSqlParameter(value);

            sqlBuilder.AppendWhereSql($"{sqlParamName} ");
            return(sqlBuilder);
        }
Beispiel #7
0
        private static void LikeLeft(MethodCallExpression expression, ISqlBuilder sqlBuilder)
        {
            if (expression.Object != null)
            {
                var mermberExp = expression.Object as MemberExpression;

                if (MemberIsDataColumn(mermberExp, sqlBuilder))
                {
                    SqlVistorProvider.Where(mermberExp, sqlBuilder);
                    sqlBuilder.AppendWhereSql("LIKE '%");

                    var valueExp = expression.Arguments[0];

                    if (valueExp is ConstantExpression)
                    {
                        var contantExp = valueExp as ConstantExpression;
                        sqlBuilder.AppendWhereSql($"{contantExp.Value}");
                    }
                    else
                    {
                        var memberExp = valueExp as MemberExpression;
                        var value     = TryGetExpreesionValue(memberExp);
                        sqlBuilder.AppendWhereSql($"{value}");
                    }
                    sqlBuilder.AppendWhereSql("' ");
                }
            }
            else
            {
                var mermberExp = expression.Arguments[0] as MemberExpression;

                if (MemberIsDataColumn(mermberExp, sqlBuilder))
                {
                    SqlVistorProvider.Where(mermberExp, sqlBuilder);
                    sqlBuilder.AppendWhereSql("LIKE '%");
                    var valueExp = expression.Arguments[1];
                    if (valueExp is ConstantExpression)
                    {
                        var contantExp = valueExp as ConstantExpression;
                        sqlBuilder.AppendWhereSql($"{contantExp.Value}");
                    }
                    else
                    {
                        var memberExp = valueExp as MemberExpression;
                        var value     = TryGetExpreesionValue(memberExp);
                        sqlBuilder.AppendWhereSql($"{value}");
                    }
                    sqlBuilder.AppendWhereSql("' ");
                }
            }
        }
Beispiel #8
0
        private static void InnerIn(MethodCallExpression expression, ISqlBuilder sqlBuilder)
        {
            if (expression.Arguments != null && expression.Arguments.Any())
            {
                var mermberExp = expression.Arguments[0] as MemberExpression;

                if (MemberIsDataColumn(mermberExp, sqlBuilder))
                {
                    SqlVistorProvider.Where(mermberExp, sqlBuilder);
                    sqlBuilder.AppendWhereSql("IN ");
                    SqlVistorProvider.In(expression.Arguments[1], sqlBuilder);
                }
            }
        }
Beispiel #9
0
        protected override ISqlBuilder Delete(MemberExpression expression, ISqlBuilder sqlBuilder)
        {
            sqlBuilder.AppendWhereSql($"{sqlBuilder.Formate(expression.Member.Name)} ");

            return(sqlBuilder);
        }
Beispiel #10
0
        protected override ISqlBuilder Delete(BinaryExpression expression, ISqlBuilder sqlBuilder)
        {
            var expressionLeft  = expression.Left;
            var expressionRight = expression.Right;

            if (expressionLeft is MemberExpression)
            {
                var memberExp = expressionLeft as MemberExpression;
                if (!MemberIsDataColumn(memberExp, sqlBuilder))
                {
                    throw new NotImplementedException($"{memberExp.Member.Name} is not data column");
                }
            }
            if (expressionRight is MemberExpression)
            {
                var memberExp = expressionRight as MemberExpression;
                if (!MemberIsDataColumn(memberExp, sqlBuilder))
                {
                    throw new NotImplementedException($"{memberExp.Member.Name} is not data column");
                }
            }

            var isRightHandle = false;

            if (IsNeedsParentheses(expression, expressionLeft))
            {
                sqlBuilder.AppendWhereSql("( ");
            }

            if (expressionLeft is MemberExpression && expressionLeft.Type == typeof(bool) && expressionLeft.NodeType == ExpressionType.MemberAccess && (expression.NodeType == ExpressionType.AndAlso || expressionRight is ConstantExpression))
            {
                SqlVistorProvider.Where(expressionLeft, sqlBuilder);
                sqlBuilder.AppendWhereSql($"{OperatorParser(ExpressionType.Equal)}");

                var sqlParamName = string.Empty;
                //(m=>m.IsAdmin==true)
                if (expressionRight is ConstantExpression)
                {
                    isRightHandle = true;
                    var value = Convert.ToBoolean(((ConstantExpression)expressionRight).Value) ? 1 : 0;
                    sqlParamName = sqlBuilder.SetSqlParameter(value);
                }
                else
                {
                    //(m=>m.IsAdmin)
                    sqlParamName = sqlBuilder.SetSqlParameter(1);
                }

                sqlBuilder.AppendWhereSql($"{sqlParamName} ");
            }
            else
            {
                SqlVistorProvider.Delete(expression.Left, sqlBuilder);
            }

            if (IsNeedsParentheses(expression, expressionLeft))
            {
                sqlBuilder.AppendWhereSql(") ");
            }

            if (!isRightHandle)
            {
                var whereOperator = string.Empty;
                if ((expressionRight is ConstantExpression) && ((ConstantExpression)expressionRight).Value == null)
                {
                    whereOperator = OperatorParser(expression.NodeType, true);
                }
                else
                {
                    whereOperator = OperatorParser(expression.NodeType);
                }
                sqlBuilder.AppendWhereSql($"{whereOperator}");

                if (IsNeedsParentheses(expression, expressionRight))
                {
                    sqlBuilder.AppendWhereSql("( ");
                }

                if (expressionRight is MemberExpression && expressionRight.Type == typeof(bool) && expression.NodeType == ExpressionType.AndAlso)
                {
                    //(m=>m.IsAdmin)
                    SqlVistorProvider.Where(expressionRight, sqlBuilder);

                    sqlBuilder.AppendWhereSql($"{OperatorParser(ExpressionType.Equal)}");

                    var sqlParamName = sqlBuilder.SetSqlParameter(1);
                    sqlBuilder.AppendWhereSql($"{sqlParamName} ");
                }
                else if (expressionRight is MemberExpression && IsNodeTypeSetValue(expression.NodeType))
                {
                    var memberExp = expressionRight as MemberExpression;
                    var value     = TryGetExpreesionValue(memberExp);
                    if (value != null)
                    {
                        var sqlParamName = sqlBuilder.SetSqlParameter(value);
                        sqlBuilder.AppendWhereSql($"{sqlParamName} ");
                    }
                    else
                    {
                        SqlVistorProvider.Join(expression.Right, sqlBuilder);
                    }
                }
                else
                {
                    SqlVistorProvider.Delete(expression.Right, sqlBuilder);
                }

                if (IsNeedsParentheses(expression, expressionRight))
                {
                    sqlBuilder.AppendWhereSql(") ");
                }
            }

            return(sqlBuilder);
        }