Skip to content

Commit f9e324f

Browse files
committed
fixup! Add support for querying dynamic objects with Linq
1 parent 0397138 commit f9e324f

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

src/NHibernate/Linq/Visitors/ExpressionKeyVisitor.cs

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
using System;
22
using System.Collections;
33
using System.Collections.Generic;
4+
using System.Dynamic;
45
using System.Linq;
56
using System.Linq.Expressions;
67
using System.Reflection;
8+
using System.Runtime.CompilerServices;
79
using System.Text;
810
using NHibernate.Param;
911
using Remotion.Linq.Parsing;
@@ -214,6 +216,13 @@ protected override Expression VisitQuerySourceReference(Remotion.Linq.Clauses.Ex
214216
return expression;
215217
}
216218

219+
protected override Expression VisitDynamic(DynamicExpression expression)
220+
{
221+
FormatBinder(expression.Binder);
222+
Visit(expression.Arguments, AppendCommas);
223+
return expression;
224+
}
225+
217226
private void VisitMethod(MethodInfo methodInfo)
218227
{
219228
_string.Append(methodInfo.Name);
@@ -224,5 +233,51 @@ private void VisitMethod(MethodInfo methodInfo)
224233
_string.Append(']');
225234
}
226235
}
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+
}
227282
}
228283
}

0 commit comments

Comments
 (0)