Exemple #1
0
        private Expression JoinWhereMethod(Expression node)
        {
            while (node.NodeType == ExpressionType.Call && node is MethodCallExpression methodCall)
            {
                if (methodCall.Method.Name == MethodCall.From)
                {
                    throw new DSyntaxErrorException($"在连接函数中,禁止使用“{methodCall.Method.Name}”函数!");
                }

                if (methodCall.Method.Name == MethodCall.Where)
                {
                    Workflow(whereIsNotEmpty =>
                    {
                        if (whereIsNotEmpty)
                        {
                            writer.And();
                        }
                    }, () =>
                    {
                        using (var visitor = new WhereVisitor(this))
                        {
                            visitor.Startup(methodCall.Arguments[1]);
                        }
                    });

                    node = methodCall.Arguments[0];

                    continue;
                }

                break;
            }

            return(node);
        }
Exemple #2
0
 /// <summary>
 /// 条件。
 /// </summary>
 protected virtual void VisitIsBoolean(Expression node)
 {
     using (var visitor = new WhereVisitor(this))
     {
         visitor.Startup(node);
     }
 }
Exemple #3
0
 /// <summary>
 /// 条件。
 /// </summary>
 /// <param name="node">节点。</param>
 /// <returns></returns>
 protected override internal void VisitCondition(MethodCallExpression node)
 {
     if (node.Arguments[0].NodeType == ExpressionType.Parameter)
     {
         using (var visitor = new WhereVisitor(this))
         {
             visitor.Startup(node.Arguments[1]);
         }
     }
     else
     {
         base.VisitCondition(node);
     }
 }