1
1
using System ;
2
2
using System . Collections ;
3
3
using System . Collections . Generic ;
4
+ using System . Dynamic ;
4
5
using System . Linq ;
5
6
using System . Linq . Expressions ;
6
7
using System . Reflection ;
8
+ using System . Runtime . CompilerServices ;
7
9
using System . Text ;
8
10
using NHibernate . Param ;
9
11
using Remotion . Linq . Parsing ;
@@ -214,6 +216,13 @@ protected override Expression VisitQuerySourceReference(Remotion.Linq.Clauses.Ex
214
216
return expression ;
215
217
}
216
218
219
+ protected override Expression VisitDynamic ( DynamicExpression expression )
220
+ {
221
+ FormatBinder ( expression . Binder ) ;
222
+ Visit ( expression . Arguments , AppendCommas ) ;
223
+ return expression ;
224
+ }
225
+
217
226
private void VisitMethod ( MethodInfo methodInfo )
218
227
{
219
228
_string . Append ( methodInfo . Name ) ;
@@ -224,5 +233,51 @@ private void VisitMethod(MethodInfo methodInfo)
224
233
_string . Append ( ']' ) ;
225
234
}
226
235
}
236
+
237
+ private void FormatBinder ( CallSiteBinder binder )
238
+ {
239
+ switch ( binder )
240
+ {
241
+ case ConvertBinder b :
242
+ _string . Append ( "Convert " ) . Append ( b . Type ) ;
243
+ break ;
244
+ case CreateInstanceBinder _:
245
+ _string . Append ( "Create" ) ;
246
+ break ;
247
+ case DeleteIndexBinder _:
248
+ _string . Append ( "DeleteIndex" ) ;
249
+ break ;
250
+ case DeleteMemberBinder b :
251
+ _string . Append ( "DeleteMember " ) . Append ( b . Name ) ;
252
+ break ;
253
+ case BinaryOperationBinder b :
254
+ _string . Append ( b . Operation ) ;
255
+ break ;
256
+ case GetIndexBinder _:
257
+ _string . Append ( "GetIndex" ) ;
258
+ break ;
259
+ case GetMemberBinder b :
260
+ _string . Append ( "GetMember " ) . Append ( b . Name ) ;
261
+ break ;
262
+ case InvokeBinder _:
263
+ _string . Append ( "Invoke" ) ;
264
+ break ;
265
+ case InvokeMemberBinder b :
266
+ _string . Append ( "InvokeMember " ) . Append ( b . Name ) ;
267
+ break ;
268
+ case SetIndexBinder _:
269
+ _string . Append ( "SetIndex" ) ;
270
+ break ;
271
+ case SetMemberBinder b :
272
+ _string . Append ( "SetMember " ) . Append ( b . Name ) ;
273
+ break ;
274
+ case UnaryOperationBinder b :
275
+ _string . Append ( b . Operation ) ;
276
+ break ;
277
+ case DynamicMetaObjectBinder _:
278
+ _string . Append ( "DynamicMetaObject" ) ;
279
+ break ;
280
+ }
281
+ }
227
282
}
228
283
}
0 commit comments