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); }
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); }
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); }
protected override ISqlBuilder Delete(MethodCallExpression expression, ISqlBuilder sqlBuilder) { var value = TryGetExpreesionValue(expression); var sqlParamName = sqlBuilder.SetSqlParameter(value); sqlBuilder.AppendWhereSql($"{sqlParamName} "); return(sqlBuilder); }
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("' "); } } }
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); } } }
protected override ISqlBuilder Delete(MemberExpression expression, ISqlBuilder sqlBuilder) { sqlBuilder.AppendWhereSql($"{sqlBuilder.Formate(expression.Member.Name)} "); return(sqlBuilder); }
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); }