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); }
/// <summary> /// 条件。 /// </summary> protected virtual void VisitIsBoolean(Expression node) { using (var visitor = new WhereVisitor(this)) { visitor.Startup(node); } }
/// <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); } }