Esempio n. 1
0
 protected override Expression VisitBinary(BinaryExpression node)
 {
     WhereExpression.Append("(");
     Visit(node.Left);
     CurrentOperator = WhereOperator.GetOperator(node.NodeType);
     WhereExpression.AppendFormat(" {0} ", CurrentOperator);
     Visit(node.Right);
     WhereExpression.Append(")");
     return(node);
 }
Esempio n. 2
0
 protected override Expression VisitUnary(UnaryExpression node)
 {
     if (node.NodeType == ExpressionType.Not)
     {
         WhereExpression.Append(WhereOperator.GetOperator(node.NodeType));
         Visit(node.Operand);
     }
     else
     {
         Visit(node.Operand);
     }
     return(node);
 }
Esempio n. 3
0
 /// <summary>
 /// 构建表达式
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="expressionList"></param>
 /// <returns></returns>
 public string Build <T>(ref DynamicParameters param, List <WhereExpression> expressionList)
 {
     ClassType = typeof(T);
     Param     = param;
     foreach (var item in expressionList)
     {
         if ((!item.Equals(expressionList.FindAll(f => string.IsNullOrEmpty(f.StringWhere)).First())) && item.ExpressType != ExpressionType.Default)
         {
             WhereExpression.AppendFormat(" {0} ", WhereOperator.GetOperator(item.ExpressType ?? 0));
         }
         if (!string.IsNullOrEmpty(item.StringWhere))
         {
             WhereExpression.Append(item.StringWhere);
             continue;
         }
         Visit(item.Expression);
     }
     return(WhereExpression.ToString());
 }
Esempio n. 4
0
 protected override Expression VisitMethodCall(MethodCallExpression node)
 {
     if (node.Arguments.Count == 3 && WhereOperator.Methods.Contains(node.Method.Name) && node.Method.Name.Contains("Between"))
     {
         WhereExpression.Append("(");
         CurrentOperator = WhereOperator.GetOperator(node.Method.Name);
         Visit(node.Arguments[0]);
         WhereExpression.AppendFormat(" {0} ", CurrentOperator);
         Visit(node.Arguments[1]);
         WhereExpression.AppendFormat(" AND ");
         Visit(node.Arguments[2]);
         WhereExpression.Append(")");
     }
     else if (node.Arguments.Count == 2 && WhereOperator.Methods.Contains(node.Method.Name))
     {
         WhereExpression.Append("(");
         Visit(node.Arguments[0]);
         CurrentOperator = WhereOperator.GetOperator(node.Method.Name);
         WhereExpression.AppendFormat(" {0} ", CurrentOperator);
         Visit(node.Arguments[1]);
         WhereExpression.Append(")");
     }
     else if (node.Arguments.Count == 1 && WhereOperator.Methods.Contains(node.Method.Name))
     {
         WhereExpression.Append("(");
         Visit(node.Arguments[0]);
         CurrentOperator = WhereOperator.GetOperator(node.Method.Name);
         WhereExpression.AppendFormat(" {0} ", CurrentOperator);
         WhereExpression.Append(")");
     }
     else
     {
         var value = Expression.Lambda(node).Compile().DynamicInvoke();
         SetValue(value);
     }
     return(node);
 }