From 3d7ecd7264e55e186d56f4eb2f66415a01d25a54 Mon Sep 17 00:00:00 2001 From: Swagata Prateek Date: Fri, 30 Sep 2016 16:42:33 +0200 Subject: [PATCH 1/2] Enums would be now treated in their text form instead of numeric form --- LinqToQuerystring/TreeNodes/Base/TreeNode.cs | 5 +++++ .../TreeNodes/Comparisons/EqualsNode.cs | 2 +- .../TreeNodes/Comparisons/GreaterThanNode.cs | 2 +- .../Comparisons/GreaterThanOrEqualNode.cs | 2 +- .../TreeNodes/Comparisons/LessThanNode.cs | 2 +- .../Comparisons/LessThanOrEqualNode.cs | 2 +- .../TreeNodes/DataTypes/StringNode.cs | 21 +++++++++++++++++-- 7 files changed, 29 insertions(+), 7 deletions(-) diff --git a/LinqToQuerystring/TreeNodes/Base/TreeNode.cs b/LinqToQuerystring/TreeNodes/Base/TreeNode.cs index 0423ae7..ef389b4 100644 --- a/LinqToQuerystring/TreeNodes/Base/TreeNode.cs +++ b/LinqToQuerystring/TreeNodes/Base/TreeNode.cs @@ -60,6 +60,11 @@ protected IEnumerable ChildNodes public abstract Expression BuildLinqExpression( IQueryable query, Expression expression, Expression item = null); + public virtual Expression BuildLinqExpressionWithComparison( IQueryable query, Expression expression, Expression item = null, Expression compareExpression = null) + { + return BuildLinqExpression(query, expression, item); + } + public virtual int CompareTo(TreeNode other) { return 0; diff --git a/LinqToQuerystring/TreeNodes/Comparisons/EqualsNode.cs b/LinqToQuerystring/TreeNodes/Comparisons/EqualsNode.cs index 7584aaa..aa19217 100644 --- a/LinqToQuerystring/TreeNodes/Comparisons/EqualsNode.cs +++ b/LinqToQuerystring/TreeNodes/Comparisons/EqualsNode.cs @@ -18,7 +18,7 @@ public EqualsNode(Type inputType, IToken payload, TreeNodeFactory treeNodeFactor public override Expression BuildLinqExpression(IQueryable query, Expression expression, Expression item = null) { var leftExpression = this.LeftNode.BuildLinqExpression(query, expression, item); - var rightExpression = this.RightNode.BuildLinqExpression(query, expression, item); + var rightExpression = this.RightNode.BuildLinqExpressionWithComparison(query, expression, item, leftExpression); // Nasty workaround to avoid comparison of Aggregate functions to true or false which breaks Entity framework if (leftExpression.Type == typeof(bool) && rightExpression.Type == typeof(bool) && rightExpression is ConstantExpression) diff --git a/LinqToQuerystring/TreeNodes/Comparisons/GreaterThanNode.cs b/LinqToQuerystring/TreeNodes/Comparisons/GreaterThanNode.cs index 9f78096..3d500ff 100644 --- a/LinqToQuerystring/TreeNodes/Comparisons/GreaterThanNode.cs +++ b/LinqToQuerystring/TreeNodes/Comparisons/GreaterThanNode.cs @@ -18,7 +18,7 @@ public GreaterThanNode(Type inputType, IToken payload, TreeNodeFactory treeNodeF public override Expression BuildLinqExpression(IQueryable query, Expression expression, Expression item = null) { var leftExpression = this.LeftNode.BuildLinqExpression(query, expression, item); - var rightExpression = this.RightNode.BuildLinqExpression(query, expression, item); + var rightExpression = this.RightNode.BuildLinqExpressionWithComparison(query, expression, item, leftExpression); NormalizeTypes(ref leftExpression, ref rightExpression); diff --git a/LinqToQuerystring/TreeNodes/Comparisons/GreaterThanOrEqualNode.cs b/LinqToQuerystring/TreeNodes/Comparisons/GreaterThanOrEqualNode.cs index b6581a4..b59466a 100644 --- a/LinqToQuerystring/TreeNodes/Comparisons/GreaterThanOrEqualNode.cs +++ b/LinqToQuerystring/TreeNodes/Comparisons/GreaterThanOrEqualNode.cs @@ -18,7 +18,7 @@ public GreaterThanOrEqualNode(Type inputType, IToken payload, TreeNodeFactory tr public override Expression BuildLinqExpression(IQueryable query, Expression expression, Expression item = null) { var leftExpression = this.LeftNode.BuildLinqExpression(query, expression, item); - var rightExpression = this.RightNode.BuildLinqExpression(query, expression, item); + var rightExpression = this.RightNode.BuildLinqExpressionWithComparison(query, expression, item, leftExpression); NormalizeTypes(ref leftExpression, ref rightExpression); diff --git a/LinqToQuerystring/TreeNodes/Comparisons/LessThanNode.cs b/LinqToQuerystring/TreeNodes/Comparisons/LessThanNode.cs index 8d4973d..dcb66f9 100644 --- a/LinqToQuerystring/TreeNodes/Comparisons/LessThanNode.cs +++ b/LinqToQuerystring/TreeNodes/Comparisons/LessThanNode.cs @@ -18,7 +18,7 @@ public LessThanNode(Type inputType, IToken payload, TreeNodeFactory treeNodeFact public override Expression BuildLinqExpression(IQueryable query, Expression expression, Expression item = null) { var leftExpression = this.LeftNode.BuildLinqExpression(query, expression, item); - var rightExpression = this.RightNode.BuildLinqExpression(query, expression, item); + var rightExpression = this.RightNode.BuildLinqExpressionWithComparison(query, expression, item, leftExpression); NormalizeTypes(ref leftExpression, ref rightExpression); diff --git a/LinqToQuerystring/TreeNodes/Comparisons/LessThanOrEqualNode.cs b/LinqToQuerystring/TreeNodes/Comparisons/LessThanOrEqualNode.cs index 15a379a..05a5462 100644 --- a/LinqToQuerystring/TreeNodes/Comparisons/LessThanOrEqualNode.cs +++ b/LinqToQuerystring/TreeNodes/Comparisons/LessThanOrEqualNode.cs @@ -18,7 +18,7 @@ public LessThanOrEqualNode(Type inputType, IToken payload, TreeNodeFactory treeN public override Expression BuildLinqExpression(IQueryable query, Expression expression, Expression item = null) { var leftExpression = this.LeftNode.BuildLinqExpression(query, expression, item); - var rightExpression = this.RightNode.BuildLinqExpression(query, expression, item); + var rightExpression = this.RightNode.BuildLinqExpressionWithComparison(query, expression, item, leftExpression); NormalizeTypes(ref leftExpression, ref rightExpression); diff --git a/LinqToQuerystring/TreeNodes/DataTypes/StringNode.cs b/LinqToQuerystring/TreeNodes/DataTypes/StringNode.cs index 1fc9ff6..3944cb2 100644 --- a/LinqToQuerystring/TreeNodes/DataTypes/StringNode.cs +++ b/LinqToQuerystring/TreeNodes/DataTypes/StringNode.cs @@ -16,6 +16,24 @@ public StringNode(Type inputType, IToken payload, TreeNodeFactory treeNodeFactor } public override Expression BuildLinqExpression(IQueryable query, Expression expression, Expression item = null) + { + var text = ExtractText(); + return Expression.Constant(text); + } + + public override Expression BuildLinqExpressionWithComparison(IQueryable query, Expression expression, Expression item = null, + Expression compareExpression = null) + { + if (compareExpression != null && compareExpression.Type.IsEnum) + { + Type enumType = compareExpression.Type; + var enumValue = Convert.ChangeType(Enum.Parse(enumType, ExtractText(),ignoreCase: true), enumType); + return Expression.Constant(enumValue); + } + return base.BuildLinqExpressionWithComparison(query, expression, item, compareExpression); + } + + private string ExtractText() { var text = this.Text.Trim('\''); text = text.Replace(@"\\", @"\"); @@ -26,8 +44,7 @@ public override Expression BuildLinqExpression(IQueryable query, Expression expr text = text.Replace(@"\r", "\r"); text = text.Replace(@"\'", "'"); text = text.Replace(@"''", "'"); - - return Expression.Constant(text); + return text; } } } \ No newline at end of file From 45cd28b0d1b6b84814370c713202625a49855d7e Mon Sep 17 00:00:00 2001 From: thehoneymad Date: Fri, 4 Nov 2016 16:29:35 +0100 Subject: [PATCH 2/2] Deleted unnecessary WebApi project, WebApi2 is sufficient for NerdCats --- .vs/config/applicationhost.config | 1047 +++++++++++++++++ .../LinqToQueryString.Tests.csproj | 3 - .../LinqToQuerystring.Demo.csproj | 29 +- LinqToQuerystring.Demo/Web.config | 32 +- LinqToQuerystring.Demo/packages.config | 10 +- .../Controllers/NonGenericController.cs | 1 - ...uerystring.IntegrationTests.WebApi2.csproj | 23 +- .../app.config | 15 + .../packages.config | 4 +- .../LinqToQuerystring.WebAPI.nuspec | 20 - .../LinqToQuerystring.WebApi.csproj | 58 - .../LinqToQuerystring.WebApi2.csproj | 32 +- LinqToQuerystring.WebApi/packages.config | 12 +- LinqToQuerystring.sln | 23 +- LinqToQuerystring/LinqToQuerystringLexer.cs | 560 ++++----- LinqToQuerystring/LinqToQuerystringParser.cs | 354 +++--- 16 files changed, 1618 insertions(+), 605 deletions(-) create mode 100644 .vs/config/applicationhost.config create mode 100644 LinqToQuerystring.IntegrationTests.WebAPI/app.config delete mode 100644 LinqToQuerystring.WebApi/LinqToQuerystring.WebAPI.nuspec delete mode 100644 LinqToQuerystring.WebApi/LinqToQuerystring.WebApi.csproj diff --git a/.vs/config/applicationhost.config b/.vs/config/applicationhost.config new file mode 100644 index 0000000..e4eec49 --- /dev/null +++ b/.vs/config/applicationhost.config @@ -0,0 +1,1047 @@ + + + + + + + +
+
+
+
+
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+
+ + +
+
+
+
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LinqToQueryString.Tests/LinqToQueryString.Tests.csproj b/LinqToQueryString.Tests/LinqToQueryString.Tests.csproj index 761a599..b5504e5 100644 --- a/LinqToQueryString.Tests/LinqToQueryString.Tests.csproj +++ b/LinqToQueryString.Tests/LinqToQueryString.Tests.csproj @@ -65,9 +65,6 @@ - - - diff --git a/LinqToQuerystring.Demo/LinqToQuerystring.Demo.csproj b/LinqToQuerystring.Demo/LinqToQuerystring.Demo.csproj index d1804b5..a398afe 100644 --- a/LinqToQuerystring.Demo/LinqToQuerystring.Demo.csproj +++ b/LinqToQuerystring.Demo/LinqToQuerystring.Demo.csproj @@ -8,7 +8,7 @@ 2.0 {E6309DE6-1640-4E6F-9B47-B1E8890724FE} - {E3E379DF-F4C6-4180-9B81-6769533ABE47};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} Library Properties LinqToQuerystring.Demo @@ -23,6 +23,7 @@ ..\ true ..\packages\WebGrease.1.5.2\lib + true @@ -56,15 +57,17 @@ ..\packages\Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.1\lib\net40\Microsoft.Web.Mvc.FixedDisplayModes.dll - - ..\packages\Newtonsoft.Json.5.0.6\lib\net45\Newtonsoft.Json.dll + + ..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll + True ..\packages\Microsoft.Net.Http.2.2.15\lib\net45\System.Net.Http.Extensions.dll - - ..\packages\Microsoft.AspNet.WebApi.Client.4.0.30506.0\lib\net40\System.Net.Http.Formatting.dll + + ..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll + True ..\packages\Microsoft.Net.Http.2.2.15\lib\net45\System.Net.Http.Primitives.dll @@ -81,8 +84,9 @@ True ..\packages\Microsoft.AspNet.WebPages.2.0.30506.0\lib\net40\System.Web.Helpers.dll - - ..\packages\Microsoft.AspNet.WebApi.Core.4.0.30506.0\lib\net40\System.Web.Http.dll + + ..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll + True ..\packages\Microsoft.AspNet.WebApi.OData.4.0.30506\lib\net40\System.Web.Http.OData.dll @@ -91,8 +95,9 @@ False ..\packages\Microsoft.AspNet.WebApi.Tracing.4.0.30506\lib\net40\System.Web.Http.Tracing.dll - - ..\packages\Microsoft.AspNet.WebApi.WebHost.4.0.30506.0\lib\net40\System.Web.Http.WebHost.dll + + ..\packages\Microsoft.AspNet.WebApi.WebHost.5.2.3\lib\net45\System.Web.Http.WebHost.dll + True True @@ -206,9 +211,9 @@ - - {ac211100-2f7a-46a9-b630-c2df57f50895} - LinqToQuerystring.WebApi + + {C2EBA6BA-11AD-4AF7-B935-B71B761A63FC} + LinqToQuerystring.WebApi2 {7859C906-95D8-4322-AA44-BC854B065AEE} diff --git a/LinqToQuerystring.Demo/Web.config b/LinqToQuerystring.Demo/Web.config index 49b9302..37761c3 100644 --- a/LinqToQuerystring.Demo/Web.config +++ b/LinqToQuerystring.Demo/Web.config @@ -64,12 +64,10 @@ - - - - - + + + @@ -97,6 +95,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LinqToQuerystring.Demo/packages.config b/LinqToQuerystring.Demo/packages.config index 6e56091..9152130 100644 --- a/LinqToQuerystring.Demo/packages.config +++ b/LinqToQuerystring.Demo/packages.config @@ -13,13 +13,13 @@ - - - + + + - + @@ -30,7 +30,7 @@ - + \ No newline at end of file diff --git a/LinqToQuerystring.IntegrationTests.WebAPI/Controllers/NonGenericController.cs b/LinqToQuerystring.IntegrationTests.WebAPI/Controllers/NonGenericController.cs index 064e203..1e96422 100644 --- a/LinqToQuerystring.IntegrationTests.WebAPI/Controllers/NonGenericController.cs +++ b/LinqToQuerystring.IntegrationTests.WebAPI/Controllers/NonGenericController.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Web.Http; - using LinqToQuerystring.WebApi; public class NonGenericController : ApiController diff --git a/LinqToQuerystring.IntegrationTests.WebAPI/LinqToQuerystring.IntegrationTests.WebApi2.csproj b/LinqToQuerystring.IntegrationTests.WebAPI/LinqToQuerystring.IntegrationTests.WebApi2.csproj index 7b8eea1..aea15ee 100644 --- a/LinqToQuerystring.IntegrationTests.WebAPI/LinqToQuerystring.IntegrationTests.WebApi2.csproj +++ b/LinqToQuerystring.IntegrationTests.WebAPI/LinqToQuerystring.IntegrationTests.WebApi2.csproj @@ -52,15 +52,21 @@ False ..\packages\Machine.Specifications.Should.0.7.0-Unstable0008\lib\net45\Machine.Specifications.Should.dll - - ..\packages\Newtonsoft.Json.5.0.6\lib\net45\Newtonsoft.Json.dll + + ..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll + True - + + ..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll + True + - - + + ..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll + True + ..\packages\WebAPI.Testing.1.0.0.1\lib\net45\WebAPI.Testing.dll @@ -84,12 +90,13 @@ + - - {AC211100-2F7A-46A9-B630-C2DF57F50895} - LinqToQuerystring.WebApi + + {C2EBA6BA-11AD-4AF7-B935-B71B761A63FC} + LinqToQuerystring.WebApi2 {7859c906-95d8-4322-aa44-bc854b065aee} diff --git a/LinqToQuerystring.IntegrationTests.WebAPI/app.config b/LinqToQuerystring.IntegrationTests.WebAPI/app.config new file mode 100644 index 0000000..0bdc88d --- /dev/null +++ b/LinqToQuerystring.IntegrationTests.WebAPI/app.config @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LinqToQuerystring.IntegrationTests.WebAPI/packages.config b/LinqToQuerystring.IntegrationTests.WebAPI/packages.config index 1aea12e..935d28a 100644 --- a/LinqToQuerystring.IntegrationTests.WebAPI/packages.config +++ b/LinqToQuerystring.IntegrationTests.WebAPI/packages.config @@ -3,6 +3,8 @@ - + + + \ No newline at end of file diff --git a/LinqToQuerystring.WebApi/LinqToQuerystring.WebAPI.nuspec b/LinqToQuerystring.WebApi/LinqToQuerystring.WebAPI.nuspec deleted file mode 100644 index 690f8fb..0000000 --- a/LinqToQuerystring.WebApi/LinqToQuerystring.WebAPI.nuspec +++ /dev/null @@ -1,20 +0,0 @@ - - - - 0.0 - Roysvork - Roysvork - LinqToQuerystring.WebApi - Linq to Querystring - Web Api - false - Provides an action filter to enable LinqToQuerystring for Web API actions that return IQueryable - Pete Smith 2013 - - - - - - - - - \ No newline at end of file diff --git a/LinqToQuerystring.WebApi/LinqToQuerystring.WebApi.csproj b/LinqToQuerystring.WebApi/LinqToQuerystring.WebApi.csproj deleted file mode 100644 index 36b9eba..0000000 --- a/LinqToQuerystring.WebApi/LinqToQuerystring.WebApi.csproj +++ /dev/null @@ -1,58 +0,0 @@ - - - - - Debug - AnyCPU - {AC211100-2F7A-46A9-B630-C2DF57F50895} - Library - Properties - LinqToQuerystring.WebApi - LinqToQuerystring.WebApi - v4.0 - 512 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - {7859c906-95d8-4322-aa44-bc854b065aee} - LinqToQuerystring - - - - - \ No newline at end of file diff --git a/LinqToQuerystring.WebApi/LinqToQuerystring.WebApi2.csproj b/LinqToQuerystring.WebApi/LinqToQuerystring.WebApi2.csproj index 8793da9..9513994 100644 --- a/LinqToQuerystring.WebApi/LinqToQuerystring.WebApi2.csproj +++ b/LinqToQuerystring.WebApi/LinqToQuerystring.WebApi2.csproj @@ -35,19 +35,29 @@ false - - ..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll + + ..\packages\Newtonsoft.Json.6.0.4\lib\net45\Newtonsoft.Json.dll + True - - False - ..\packages\Microsoft.AspNet.WebApi.Client.5.0.0\lib\net45\System.Net.Http.Formatting.dll + + ..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll + True - - False - ..\packages\Microsoft.AspNet.WebApi.Core.5.0.0\lib\net45\System.Web.Http.dll + + ..\packages\Microsoft.AspNet.WebApi.Client.5.2.2\lib\net45\System.Net.Http.Formatting.dll + True + + + ..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Primitives.dll + True + + + + ..\packages\Microsoft.AspNet.WebApi.Core.5.2.2\lib\net45\System.Web.Http.dll + True @@ -65,10 +75,10 @@ - + - - + +