@@ -49,165 +49,165 @@ public static void ParseExpression(Expression body, QueryNode parent)
4949
5050
5151
52- public static void ParseExpression_OLD ( Expression body , QueryNode parent )
53- {
54- var node = new QueryNode ( parent . Member ) ;
55- ParseExpressionInternal ( body , node ) ;
56- node . SetAddPrimitiveChildren ( ) ;
57-
58- foreach ( var childNode in node . ChildNodes )
59- {
60- parent . AddChildNode ( childNode ) ;
61- }
62- }
63-
64- private static bool IsSelectOrSelectMany ( this MethodCallExpression methodCallExpression )
65- {
66- if ( methodCallExpression . Arguments . Count != 2 )
67- {
68- return false ;
69- }
70-
71- ;
72- var methodName = methodCallExpression . Method . Name ;
73- return ( methodName == "Select" || methodName == "SelectMany" ) ;
74- }
75-
76-
77- private static void ParseExpressionInternal ( Expression body , QueryNode parent )
78- {
79- if ( body . NodeType == ExpressionType . MemberInit )
80- {
81- var exp = ( MemberInitExpression ) body ;
82- foreach ( var binding in exp . Bindings . Where ( e => e . BindingType == MemberBindingType . Assignment )
83- . Cast < MemberAssignment > ( ) )
84- {
85- ParseExpressionInternal ( binding . Expression , parent ) ;
86- }
87- }
88-
89- switch ( body )
90- {
91- case LambdaExpression lambdaExpression :
92- ParseExpressionInternal ( lambdaExpression . Body , parent ) ;
93- break ;
94-
95- case MemberExpression memberExpression :
96- var ( parentNode , _) = GetMemberQueryNode ( memberExpression ) ;
97- parent . AddChildNode ( parentNode ) ;
98- break ;
99-
100- case MethodCallExpression methodCallExp :
101- ParseMethodCallExpression ( parent , methodCallExp ) ;
102- break ;
103-
104- case NewExpression newExpression :
105- foreach ( var argument in newExpression . Arguments )
106- {
107- ParseExpression ( argument , parent ) ;
108- }
109-
110- break ;
111- }
112- }
113-
114- private static void ParseMethodCallExpression ( QueryNode parent , MethodCallExpression methodCallExp )
115- {
116- var graphInterfaceAttribute = methodCallExp . Method . GetCustomAttribute < GraphInterfaceAttribute > ( ) ;
117- if ( graphInterfaceAttribute != null )
118- {
119- var queryNode = new QueryNode ( methodCallExp . Method , methodCallExp . Method . Name , null , true ) ;
120- parent . AddChildNode ( queryNode ) ;
121- return ;
122- }
123-
124- var graphMethodAttribute = methodCallExp . Method . GetCustomAttribute < GraphMethodAttribute > ( ) ;
125- if ( graphMethodAttribute != null )
126- {
127- var arguments = new List < ArgumentValue > ( ) ;
128-
129- var i = 0 ;
130- foreach ( var parameter in methodCallExp . Method . GetParameters ( ) )
131- {
132- var graphAttribute = parameter . GetCustomAttribute < GraphArgumentAttribute > ( ) ;
133- if ( graphAttribute != null )
134- {
135- var arg = methodCallExp . Arguments [ i ] ;
136- ConstantExpression argConstant ;
137- if ( arg . NodeType == ExpressionType . Convert )
138- {
139- var unaryExpression = ( UnaryExpression ) arg ;
140- argConstant = ( ConstantExpression ) unaryExpression . Operand ;
141- }
142- else
143- {
144- argConstant = ( ConstantExpression ) arg ;
145- }
146-
147- arguments . Add ( new ArgumentValue ( parameter . Name , graphAttribute . GraphType ,
148- argConstant . Value ) ) ;
149- }
150-
151- i ++ ;
152- }
153-
154- var queryNode = new QueryNode ( methodCallExp . Method , graphMethodAttribute . GraphName , arguments ) ;
155- parent . AddChildNode ( queryNode ) ;
156- }
157- else if ( methodCallExp . IsSelectOrSelectMany ( ) )
158- {
159- if ( methodCallExp . Arguments [ 0 ] is MemberExpression memberExpr )
160- {
161- var ( ParentNode , LastNode ) = GetMemberQueryNode ( memberExpr ) ;
162- ParseExpressionInternal ( methodCallExp . Arguments [ 1 ] , LastNode ) ;
163- parent . AddChildNode ( ParentNode ) ;
164- }
165- else
166- {
167- ParseExpressionInternal ( methodCallExp . Arguments [ 1 ] , parent ) ;
168- }
169- }
170- }
171-
172- private static ( QueryNode ParentNode , QueryNode LastNode ) GetMemberQueryNode ( Expression expression )
173- {
174- var members = GetMembers ( expression ) ;
175- if ( members == null ) return ( null , null ) ;
176-
177- members . Reverse ( ) ;
178-
179- QueryNode parentNode = null ;
180- QueryNode currentNode = null ;
181-
182- foreach ( var member in members )
183- {
184- var newNode = new QueryNode ( member ) ;
185- if ( parentNode == null )
186- {
187- parentNode = newNode ;
188- }
189- else
190- {
191- currentNode . AddChildNode ( newNode ) ;
192- }
193-
194- currentNode = newNode ;
195- }
196-
197- return ( parentNode , currentNode ) ;
198- }
199-
200-
201- private static List < MemberInfo > GetMembers ( Expression expression )
202- {
203- var members = new List < MemberInfo > ( ) ;
204- if ( expression . NodeType == ExpressionType . MemberAccess )
205- {
206- var memberExpression = ( MemberExpression ) expression ;
207- members . Add ( memberExpression . Member ) ;
208- members . AddRange ( GetMembers ( memberExpression . Expression ) ) ;
209- }
210-
211- return members ;
212- }
52+ // public static void ParseExpression_OLD(Expression body, QueryNode parent)
53+ // {
54+ // var node = new QueryNode(parent.Member);
55+ // ParseExpressionInternal(body, node);
56+ // node.SetAddPrimitiveChildren();
57+
58+ // foreach (var childNode in node.ChildNodes)
59+ // {
60+ // parent.AddChildNode(childNode);
61+ // }
62+ // }
63+
64+ // private static bool IsSelectOrSelectMany(this MethodCallExpression methodCallExpression)
65+ // {
66+ // if (methodCallExpression.Arguments.Count != 2)
67+ // {
68+ // return false;
69+ // }
70+
71+ // ;
72+ // var methodName = methodCallExpression.Method.Name;
73+ // return (methodName == "Select" || methodName == "SelectMany");
74+ // }
75+
76+
77+ // private static void ParseExpressionInternal(Expression body, QueryNode parent)
78+ // {
79+ // if (body.NodeType == ExpressionType.MemberInit)
80+ // {
81+ // var exp = (MemberInitExpression)body;
82+ // foreach (var binding in exp.Bindings.Where(e => e.BindingType == MemberBindingType.Assignment)
83+ // .Cast<MemberAssignment>())
84+ // {
85+ // ParseExpressionInternal(binding.Expression, parent);
86+ // }
87+ // }
88+
89+ // switch (body)
90+ // {
91+ // case LambdaExpression lambdaExpression:
92+ // ParseExpressionInternal(lambdaExpression.Body, parent);
93+ // break;
94+
95+ // case MemberExpression memberExpression:
96+ // var (parentNode, _) = GetMemberQueryNode(memberExpression);
97+ // parent.AddChildNode(parentNode);
98+ // break;
99+
100+ // case MethodCallExpression methodCallExp:
101+ // ParseMethodCallExpression(parent, methodCallExp);
102+ // break;
103+
104+ // case NewExpression newExpression:
105+ // foreach (var argument in newExpression.Arguments)
106+ // {
107+ // ParseExpression(argument, parent);
108+ // }
109+
110+ // break;
111+ // }
112+ // }
113+
114+ // private static void ParseMethodCallExpression(QueryNode parent, MethodCallExpression methodCallExp)
115+ // {
116+ // var graphInterfaceAttribute = methodCallExp.Method.GetCustomAttribute<GraphInterfaceAttribute>();
117+ // if (graphInterfaceAttribute != null)
118+ // {
119+ // var queryNode = new QueryNode(methodCallExp.Method, methodCallExp.Method.Name, null, true);
120+ // parent.AddChildNode(queryNode);
121+ // return;
122+ // }
123+
124+ // var graphMethodAttribute = methodCallExp.Method.GetCustomAttribute<GraphMethodAttribute>();
125+ // if (graphMethodAttribute != null)
126+ // {
127+ // var arguments = new List<ArgumentValue>();
128+
129+ // var i = 0;
130+ // foreach (var parameter in methodCallExp.Method.GetParameters())
131+ // {
132+ // var graphAttribute = parameter.GetCustomAttribute<GraphArgumentAttribute>();
133+ // if (graphAttribute != null)
134+ // {
135+ // var arg = methodCallExp.Arguments[i];
136+ // ConstantExpression argConstant;
137+ // if (arg.NodeType == ExpressionType.Convert)
138+ // {
139+ // var unaryExpression = (UnaryExpression)arg;
140+ // argConstant = (ConstantExpression)unaryExpression.Operand;
141+ // }
142+ // else
143+ // {
144+ // argConstant = (ConstantExpression)arg;
145+ // }
146+
147+ // arguments.Add(new ArgumentValue(parameter.Name, graphAttribute.GraphType,
148+ // argConstant.Value));
149+ // }
150+
151+ // i++;
152+ // }
153+
154+ // var queryNode = new QueryNode(methodCallExp.Method, graphMethodAttribute.GraphName, arguments);
155+ // parent.AddChildNode(queryNode);
156+ // }
157+ // else if (methodCallExp.IsSelectOrSelectMany())
158+ // {
159+ // if (methodCallExp.Arguments[0] is MemberExpression memberExpr)
160+ // {
161+ // var (ParentNode, LastNode) = GetMemberQueryNode(memberExpr);
162+ // ParseExpressionInternal(methodCallExp.Arguments[1], LastNode);
163+ // parent.AddChildNode(ParentNode);
164+ // }
165+ // else
166+ // {
167+ // ParseExpressionInternal(methodCallExp.Arguments[1], parent);
168+ // }
169+ // }
170+ // }
171+
172+ // private static (QueryNode ParentNode, QueryNode LastNode) GetMemberQueryNode(Expression expression)
173+ // {
174+ // var members = GetMembers(expression);
175+ // if (members == null) return (null, null);
176+
177+ // members.Reverse();
178+
179+ // QueryNode parentNode = null;
180+ // QueryNode currentNode = null;
181+
182+ // foreach (var member in members)
183+ // {
184+ // var newNode = new QueryNode(member);
185+ // if (parentNode == null)
186+ // {
187+ // parentNode = newNode;
188+ // }
189+ // else
190+ // {
191+ // currentNode.AddChildNode(newNode);
192+ // }
193+
194+ // currentNode = newNode;
195+ // }
196+
197+ // return (parentNode, currentNode);
198+ // }
199+
200+
201+ // private static List<MemberInfo> GetMembers(Expression expression)
202+ // {
203+ // var members = new List<MemberInfo>();
204+ // if (expression.NodeType == ExpressionType.MemberAccess)
205+ // {
206+ // var memberExpression = (MemberExpression)expression;
207+ // members.Add(memberExpression.Member);
208+ // members.AddRange(GetMembers(memberExpression.Expression));
209+ // }
210+
211+ // return members;
212+ // }
213213}
0 commit comments