Skip to content

Commit 1b29a54

Browse files
authored
Merge pull request #37 from jogibear9988/patch-1
Support strings as Enum Parameter Objects
2 parents e8c1391 + f64efff commit 1b29a54

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

src/System.Linq.Dynamic.Core/ExpressionParser.cs

+19-3
Original file line numberDiff line numberDiff line change
@@ -672,12 +672,28 @@ Expression ParseComparison()
672672
}
673673
else if (IsEnumType(left.Type) && (constantExpr = right as ConstantExpression) != null)
674674
{
675-
var wrt = Enum.ToObject(left.Type, constantExpr.Value);
675+
object wrt = null;
676+
if (constantExpr.Value is string)
677+
{
678+
wrt = Enum.Parse(left.Type, constantExpr.Value as string, false);
679+
}
680+
else
681+
{
682+
wrt = Enum.ToObject(left.Type, constantExpr.Value);
683+
}
676684
right = Expression.Constant(wrt, left.Type);
677685
}
678686
else if (IsEnumType(right.Type) && (constantExpr = left as ConstantExpression) != null)
679687
{
680-
var wrt = Enum.ToObject(right.Type, constantExpr.Value);
688+
object wrt = null;
689+
if (constantExpr.Value is string)
690+
{
691+
wrt = Enum.Parse(right.Type, constantExpr.Value as string, false);
692+
}
693+
else
694+
{
695+
wrt = Enum.ToObject(right.Type, constantExpr.Value);
696+
}
681697
left = Expression.Constant(wrt, right.Type);
682698
}
683699
else
@@ -2725,4 +2741,4 @@ internal static void ResetDynamicLinqTypes()
27252741
_keywords = null;
27262742
}
27272743
}
2728-
}
2744+
}

test/System.Linq.Dynamic.Core.Tests/ExpressionTests.cs

+2
Original file line numberDiff line numberDiff line change
@@ -458,13 +458,15 @@ public void ExpressionTests_Enum()
458458
var result3 = qry.Where("it = Var5");
459459
var result4 = qry.Where("it = @0", TestEnum.Var5);
460460
var result5 = qry.Where("it = @0", 8);
461+
var result6 = qry.Where("it = @0", "Var5");
461462

462463
//Assert
463464
Assert.Equal(new[] { TestEnum.Var1, TestEnum.Var2, TestEnum.Var3 }, result1.ToArray());
464465
Assert.Equal(new[] { TestEnum.Var1, TestEnum.Var2, TestEnum.Var3 }, result2.ToArray());
465466
Assert.Equal(TestEnum.Var5, result3.Single());
466467
Assert.Equal(TestEnum.Var5, result4.Single());
467468
Assert.Equal(TestEnum.Var5, result5.Single());
469+
Assert.Equal(TestEnum.Var5, result6.Single());
468470
}
469471

470472
[Fact]

0 commit comments

Comments
 (0)