Exemple #1
0
        private static Sql ResolveMethodCallIn(MethodCallExpression expression)
        {
            string left  = StoreBase.GetColumnName((MemberExpression)expression.Arguments[0]);
            string right = "";

            if (expression.Object.NodeType == ExpressionType.MemberAccess)
            {
                right = ResolveMemberValue((MemberExpression)expression.Object);
            }
            else if (expression.Object.NodeType == ExpressionType.Call)
            {
                right = ResolveMethodCall((MethodCallExpression)expression.Object).CommandText;
            }
            else
            {
                throw new ExpressionException();
            }

            if (string.IsNullOrWhiteSpace(right))
            {
                return(new Sql(Combining(left, KeywordConst.IN, "('')")));
            }

            return(new Sql(Combining(left, KeywordConst.IN, $"({right})")));
        }
Exemple #2
0
        private static Sql ResolveMethodCallEqualsOrLike(MethodCallExpression expression)
        {
            string left  = StoreBase.GetColumnName((MemberExpression)expression.Object);
            string right = "";

            if (expression.Arguments[0] is MemberExpression)
            {
                right = Eval((MemberExpression)expression.Arguments[0]);
            }
            else if (expression.Arguments[0] is ConstantExpression)
            {
                right = ResolveConstant((ConstantExpression)expression.Arguments[0]);
            }
            else if (expression.Arguments[0] is MethodCallExpression)
            {
                right = ResolveMethodCall((MethodCallExpression)expression.Arguments[0]).CommandText;
            }
            else
            {
                throw new ExpressionException();
            }

            Sql sql = new Sql();

            switch (expression.Method.Name)
            {
            case KeywordConst.Equals:
                sql.CommandText = Combining(left, "=", $"@{left}");
                sql.Parameters.Add(new Parameter(left, right));
                return(sql);

            case KeywordConst.Contains:
                sql.CommandText = Combining(left, KeywordConst.LIKE, $"@{left}");
                sql.Parameters.Add(new Parameter(left, $"%{right}%"));
                return(sql);

            default:
                throw new ExpressionException();
            }
        }
Exemple #3
0
 private static string ResolveMemberName(MemberExpression expression)
 {
     return(StoreBase.GetColumnName(expression));
 }