From 3d7d2b568537975ac4fd849e62772a1cfb08a5ed Mon Sep 17 00:00:00 2001 From: Rohitashwa Chakraborty Date: Thu, 21 May 2020 20:20:35 +0530 Subject: [PATCH] Update WhereExpression.cs This change will allow users to probe deeper than 2 levels of a JSON. --- .../Expressions/WhereExpression.cs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/QueryDesignerCore/Expressions/WhereExpression.cs b/src/QueryDesignerCore/Expressions/WhereExpression.cs index 2dbb4f4..7734768 100644 --- a/src/QueryDesignerCore/Expressions/WhereExpression.cs +++ b/src/QueryDesignerCore/Expressions/WhereExpression.cs @@ -185,7 +185,8 @@ private static Expression GetExpressionForField(Expression e, WhereFilter filter throw new ArgumentException("Filter type cannot be None for single filter."); var s = filter.Field.Split('.'); Expression prop = e; - + + string prev = ""; foreach (var t in s) { if (IsEnumerable(prop)) @@ -194,10 +195,17 @@ private static Expression GetExpressionForField(Expression e, WhereFilter filter var generic = ExpressionMethod.MakeGenericMethod( prop.Type.GenericTypeArguments.Single()); + + string temp = String.Join(".",s); + int index = temp.IndexOf(prev); + string c = (index < 0) + ? sourceString + : sourceString.Remove(index, prev.Length + 1); + object[] pars = { new WhereFilter { - Field = t, + Field = c, FilterType = filter.FilterType, Value = filter.Value }, @@ -211,6 +219,7 @@ private static Expression GetExpressionForField(Expression e, WhereFilter filter expr); } prop = Expression.Property(prop, GetDeclaringProperty(prop, t)); + prev = t; } var exp = GenerateExpressionOneField(prop, filter); return exp;