From ed2683db93ccbdd345f2d8d2f19cf26287d91952 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jochen=20K=C3=BChner?= Date: Thu, 21 Jul 2016 01:11:59 +0200 Subject: [PATCH 1/4] Support strings as Enum Parameter Objects --- .../ExpressionParser.cs | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/System.Linq.Dynamic.Core/ExpressionParser.cs b/src/System.Linq.Dynamic.Core/ExpressionParser.cs index aaed7277..ec526ddc 100644 --- a/src/System.Linq.Dynamic.Core/ExpressionParser.cs +++ b/src/System.Linq.Dynamic.Core/ExpressionParser.cs @@ -672,12 +672,28 @@ Expression ParseComparison() } else if (IsEnumType(left.Type) && (constantExpr = right as ConstantExpression) != null) { - var wrt = Enum.ToObject(left.Type, constantExpr.Value); + object wrt = null; + if (constantExpr.Value is string) + { + wrt = Enum.Parse(left.Type, constantExpr.Value as string); + } + else + { + wrt = Enum.ToObject(left.Type, constantExpr.Value); + } right = Expression.Constant(wrt, left.Type); } else if (IsEnumType(right.Type) && (constantExpr = left as ConstantExpression) != null) { - var wrt = Enum.ToObject(right.Type, constantExpr.Value); + object wrt = null; + if (constantExpr.Value is string) + { + wrt = Enum.Parse(right.Type, constantExpr.Value as string); + } + else + { + wrt = Enum.ToObject(right.Type, constantExpr.Value); + } left = Expression.Constant(wrt, right.Type); } else @@ -2725,4 +2741,4 @@ internal static void ResetDynamicLinqTypes() _keywords = null; } } -} \ No newline at end of file +} From dfe7da72acc717f79598f2c67b20d5f8312055c6 Mon Sep 17 00:00:00 2001 From: jogibear9988 Date: Fri, 22 Jul 2016 00:02:27 +0200 Subject: [PATCH 2/4] Bugfix compile --- src/System.Linq.Dynamic.Core/ExpressionParser.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/System.Linq.Dynamic.Core/ExpressionParser.cs b/src/System.Linq.Dynamic.Core/ExpressionParser.cs index ec526ddc..2fdf1b30 100644 --- a/src/System.Linq.Dynamic.Core/ExpressionParser.cs +++ b/src/System.Linq.Dynamic.Core/ExpressionParser.cs @@ -675,7 +675,7 @@ Expression ParseComparison() object wrt = null; if (constantExpr.Value is string) { - wrt = Enum.Parse(left.Type, constantExpr.Value as string); + wrt = Enum.Parse(left.Type, constantExpr.Value as string, true); } else { @@ -688,7 +688,7 @@ Expression ParseComparison() object wrt = null; if (constantExpr.Value is string) { - wrt = Enum.Parse(right.Type, constantExpr.Value as string); + wrt = Enum.Parse(right.Type, constantExpr.Value as string, true); } else { From 91c96e00a9acc7d859ea8ed17f69a3a855ae95ea Mon Sep 17 00:00:00 2001 From: jogibear9988 Date: Fri, 22 Jul 2016 00:07:23 +0200 Subject: [PATCH 3/4] A Test for String Enum Parameter --- test/System.Linq.Dynamic.Core.Tests/ExpressionTests.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/System.Linq.Dynamic.Core.Tests/ExpressionTests.cs b/test/System.Linq.Dynamic.Core.Tests/ExpressionTests.cs index 369bf15e..7cdbc74b 100644 --- a/test/System.Linq.Dynamic.Core.Tests/ExpressionTests.cs +++ b/test/System.Linq.Dynamic.Core.Tests/ExpressionTests.cs @@ -458,6 +458,7 @@ public void ExpressionTests_Enum() var result3 = qry.Where("it = Var5"); var result4 = qry.Where("it = @0", TestEnum.Var5); var result5 = qry.Where("it = @0", 8); + var result6 = qry.Where("it = @0", "Var5"); //Assert Assert.Equal(new[] { TestEnum.Var1, TestEnum.Var2, TestEnum.Var3 }, result1.ToArray()); @@ -465,6 +466,7 @@ public void ExpressionTests_Enum() Assert.Equal(TestEnum.Var5, result3.Single()); Assert.Equal(TestEnum.Var5, result4.Single()); Assert.Equal(TestEnum.Var5, result5.Single()); + Assert.Equal(TestEnum.Var5, result6.Single()); } [Fact] From f64efff3fc0ac233adb8be32267cc869c92735e1 Mon Sep 17 00:00:00 2001 From: jogibear9988 Date: Fri, 22 Jul 2016 08:56:42 +0200 Subject: [PATCH 4/4] Ignore case should be default --- src/System.Linq.Dynamic.Core/ExpressionParser.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/System.Linq.Dynamic.Core/ExpressionParser.cs b/src/System.Linq.Dynamic.Core/ExpressionParser.cs index 2fdf1b30..2c5dca1c 100644 --- a/src/System.Linq.Dynamic.Core/ExpressionParser.cs +++ b/src/System.Linq.Dynamic.Core/ExpressionParser.cs @@ -675,7 +675,7 @@ Expression ParseComparison() object wrt = null; if (constantExpr.Value is string) { - wrt = Enum.Parse(left.Type, constantExpr.Value as string, true); + wrt = Enum.Parse(left.Type, constantExpr.Value as string, false); } else { @@ -688,7 +688,7 @@ Expression ParseComparison() object wrt = null; if (constantExpr.Value is string) { - wrt = Enum.Parse(right.Type, constantExpr.Value as string, true); + wrt = Enum.Parse(right.Type, constantExpr.Value as string, false); } else {