@@ -70,15 +70,6 @@ public string ReplaceAliasesWithPropertyPaths(string input)
7070 }
7171 }
7272
73- // foreach (var alias in _derivedPropertyMappings.Values)
74- // {
75- // foreach (var op in operators)
76- // {
77- // // Use regular expression to isolate left side of the expression
78- // var regex = new Regex($@"\b{alias.QueryName}\b(?=\s*{op})", RegexOptions.IgnoreCase);
79- // input = regex.Replace(input, $"~||~||~{alias.QueryName}");
80- // }
81- // }
8273 return input ;
8374 }
8475
@@ -126,6 +117,10 @@ private static string GetFullPropertyPath(Expression? expression)
126117 case ExpressionType . GreaterThanOrEqual :
127118 case ExpressionType . LessThanOrEqual :
128119 case ExpressionType . Equal :
120+ case ExpressionType . NotEqual :
121+ case ExpressionType . AddChecked :
122+ case ExpressionType . MultiplyChecked :
123+ case ExpressionType . SubtractChecked :
129124 var binary = ( BinaryExpression ) expression ;
130125 var left = GetFullPropertyPath ( binary . Left ) ;
131126 var right = GetFullPropertyPath ( binary . Right ) ;
@@ -134,6 +129,132 @@ private static string GetFullPropertyPath(Expression? expression)
134129 case ExpressionType . Constant :
135130 var constant = ( ConstantExpression ) expression ;
136131 return constant . Value ? . ToString ( ) ?? "" ;
132+
133+ case ExpressionType . Conditional :
134+ var conditional = ( ConditionalExpression ) expression ;
135+ var test = GetFullPropertyPath ( conditional . Test ) ;
136+ var ifTrue = GetFullPropertyPath ( conditional . IfTrue ) ;
137+ var ifFalse = GetFullPropertyPath ( conditional . IfFalse ) ;
138+ return $ "({ test } ) ? ({ ifTrue } ) : ({ ifFalse } )";
139+
140+ case ExpressionType . New :
141+ var newExpression = ( NewExpression ) expression ;
142+ var arguments = newExpression . Arguments . Select ( GetFullPropertyPath ) ;
143+ return $ "{ newExpression . Constructor . DeclaringType . Name } ({ string . Join ( ", " , arguments ) } )";
144+
145+ case ExpressionType . Invoke :
146+ var invocation = ( InvocationExpression ) expression ;
147+ var invocationArguments = invocation . Arguments . Select ( GetFullPropertyPath ) ;
148+ return $ "{ GetFullPropertyPath ( invocation . Expression ) } ({ string . Join ( ", " , invocationArguments ) } )";
149+
150+ case ExpressionType . ListInit :
151+ var listInit = ( ListInitExpression ) expression ;
152+ var newExpr = GetFullPropertyPath ( listInit . NewExpression ) ;
153+ var initializers = listInit . Initializers . Select ( init => string . Join ( ", " , init . Arguments . Select ( GetFullPropertyPath ) ) ) ;
154+ return $ "{ newExpr } {{ { string . Join ( ", " , initializers ) } }}";
155+
156+ case ExpressionType . MemberInit :
157+ var memberInit = ( MemberInitExpression ) expression ;
158+ var newExpressionPath = GetFullPropertyPath ( memberInit . NewExpression ) ;
159+ var bindings = memberInit . Bindings . Select ( binding => $ "{ binding . Member . Name } = { GetFullPropertyPath ( ( ( MemberAssignment ) binding ) . Expression ) } ") ;
160+ return $ "{ newExpressionPath } {{ { string . Join ( ", " , bindings ) } }}";
161+
162+
163+ case ExpressionType . ArrayLength :
164+ var unaryArrayLength = ( UnaryExpression ) expression ;
165+ return $ "Length({ GetFullPropertyPath ( unaryArrayLength . Operand ) } )";
166+
167+ case ExpressionType . ArrayIndex :
168+ var binaryArrayIndex = ( BinaryExpression ) expression ;
169+ return $ "{ GetFullPropertyPath ( binaryArrayIndex . Left ) } [{ GetFullPropertyPath ( binaryArrayIndex . Right ) } ]";
170+
171+ case ExpressionType . TypeAs :
172+ case ExpressionType . TypeIs :
173+ var typeBinary = ( TypeBinaryExpression ) expression ;
174+ return $ "{ GetFullPropertyPath ( typeBinary . Expression ) } is { typeBinary . TypeOperand . Name } ";
175+
176+ case ExpressionType . Coalesce :
177+ var binaryCoalesce = ( BinaryExpression ) expression ;
178+ return $ "{ GetFullPropertyPath ( binaryCoalesce . Left ) } ?? { GetFullPropertyPath ( binaryCoalesce . Right ) } ";
179+
180+ case ExpressionType . Block :
181+ var block = ( BlockExpression ) expression ;
182+ var blockExpressions = block . Expressions . Select ( GetFullPropertyPath ) ;
183+ return $ "{{ { string . Join ( "; " , blockExpressions ) } }}";
184+
185+ case ExpressionType . Throw :
186+ var unaryThrow = ( UnaryExpression ) expression ;
187+ return $ "throw { GetFullPropertyPath ( unaryThrow . Operand ) } ";
188+
189+ case ExpressionType . Try :
190+ var tryExpression = ( TryExpression ) expression ;
191+ var body = GetFullPropertyPath ( tryExpression . Body ) ;
192+ var handlers = string . Join ( " " , tryExpression . Handlers . Select ( handler => $ "catch ({ handler . Test . Name } ) {{ { GetFullPropertyPath ( handler . Body ) } }}") ) ;
193+ var @finally = tryExpression . Finally != null ? $ "finally {{ { GetFullPropertyPath ( tryExpression . Finally ) } }}" : "" ;
194+ return $ "try {{ { body } }} { handlers } { @finally } ";
195+
196+ case ExpressionType . Index :
197+ var index = ( IndexExpression ) expression ;
198+ var objectPath = GetFullPropertyPath ( index . Object ) ;
199+ var argumentsPath = string . Join ( ", " , index . Arguments . Select ( GetFullPropertyPath ) ) ;
200+ return $ "{ objectPath } [{ argumentsPath } ]";
201+
202+ case ExpressionType . NewArrayInit :
203+ var newArrayInit = ( NewArrayExpression ) expression ;
204+ var arrayInitElements = newArrayInit . Expressions . Select ( GetFullPropertyPath ) ;
205+ return $ "new { newArrayInit . Type . GetElementType ( ) . Name } [] {{ { string . Join ( ", " , arrayInitElements ) } }}";
206+
207+ case ExpressionType . NewArrayBounds :
208+ var newArrayBounds = ( NewArrayExpression ) expression ;
209+ var arrayBounds = newArrayBounds . Expressions . Select ( GetFullPropertyPath ) ;
210+ return $ "new { newArrayBounds . Type . GetElementType ( ) . Name } [{ string . Join ( ", " , arrayBounds ) } ]";
211+
212+ case ExpressionType . ConvertChecked :
213+ case ExpressionType . ExclusiveOr :
214+ case ExpressionType . LeftShift :
215+ case ExpressionType . Negate :
216+ case ExpressionType . UnaryPlus :
217+ case ExpressionType . NegateChecked :
218+ case ExpressionType . Not :
219+ case ExpressionType . Parameter :
220+ case ExpressionType . Power :
221+ case ExpressionType . Quote :
222+ case ExpressionType . RightShift :
223+ case ExpressionType . Assign :
224+ case ExpressionType . DebugInfo :
225+ case ExpressionType . Decrement :
226+ case ExpressionType . Dynamic :
227+ case ExpressionType . Default :
228+ case ExpressionType . Extension :
229+ case ExpressionType . Goto :
230+ case ExpressionType . Increment :
231+ case ExpressionType . Label :
232+ case ExpressionType . RuntimeVariables :
233+ case ExpressionType . Loop :
234+ case ExpressionType . Switch :
235+ case ExpressionType . Unbox :
236+ case ExpressionType . AddAssign :
237+ case ExpressionType . AndAssign :
238+ case ExpressionType . DivideAssign :
239+ case ExpressionType . ExclusiveOrAssign :
240+ case ExpressionType . LeftShiftAssign :
241+ case ExpressionType . ModuloAssign :
242+ case ExpressionType . MultiplyAssign :
243+ case ExpressionType . OrAssign :
244+ case ExpressionType . PowerAssign :
245+ case ExpressionType . RightShiftAssign :
246+ case ExpressionType . SubtractAssign :
247+ case ExpressionType . AddAssignChecked :
248+ case ExpressionType . MultiplyAssignChecked :
249+ case ExpressionType . SubtractAssignChecked :
250+ case ExpressionType . PreIncrementAssign :
251+ case ExpressionType . PreDecrementAssign :
252+ case ExpressionType . PostIncrementAssign :
253+ case ExpressionType . PostDecrementAssign :
254+ case ExpressionType . TypeEqual :
255+ case ExpressionType . OnesComplement :
256+ case ExpressionType . IsTrue :
257+ case ExpressionType . IsFalse :
137258 default :
138259 throw new NotSupportedException ( $ "Expression type '{ expression . NodeType } ' is not supported.") ;
139260 }
0 commit comments