using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace SqlSugar { internal class ParameterExpressionVisitor : ExpressionVisitor { public List Parameters { get; } = new List(); protected override Expression VisitParameter(ParameterExpression node) { Parameters.Add(node); return base.VisitParameter(node); } } internal class MethodCallExpressionVisitor : ExpressionVisitor { private readonly string _methodName; private bool _hasMethodCallWithName; public MethodCallExpressionVisitor(string methodName) { _methodName = methodName; } public bool HasMethodCallWithName(Expression expression) { Visit(expression); return _hasMethodCallWithName; } protected override Expression VisitMethodCall(MethodCallExpression node) { if (node.Method.Name.Contains(_methodName)) { _hasMethodCallWithName = true; return node; } return base.VisitMethodCall(node); } } internal class ExpressionTreeVisitor : ExpressionVisitor { private readonly List _nodes = new List(); //protected override Expression VisitBinary(BinaryExpression node) //{ // // 解析二元操作符表达式 // _nodes.Add(node); // Visit(node.Left); // Visit(node.Right); // return node; //} //protected override Expression VisitConstant(ConstantExpression node) //{ // // 解析常量表达式 // _nodes.Add(node); // return node; //} protected override Expression VisitMember(MemberExpression node) { // 解析成员访问表达式 _nodes.Add(node); return node; } protected override Expression VisitMethodCall(MethodCallExpression node) { // 解析方法调用表达式 _nodes.Add(node); if (node.Arguments.Any()) { Visit(node.Arguments.First()); } return node; } public List GetExpressions(Expression expression) { Visit(expression); _nodes.Reverse(); return _nodes; } } }