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})"))); }
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(); } }
private static string ResolveMemberName(MemberExpression expression) { return(StoreBase.GetColumnName(expression)); }