diff --git a/src-console/System.Linq.Dynamic.Core.ConsoleTestApp.net40/ConsoleApp_net40_sqlite_original.csproj b/src-console/System.Linq.Dynamic.Core.ConsoleTestApp.net40/ConsoleApp_net40_sqlite_original.csproj
index c4b12873..459c5903 100644
--- a/src-console/System.Linq.Dynamic.Core.ConsoleTestApp.net40/ConsoleApp_net40_sqlite_original.csproj
+++ b/src-console/System.Linq.Dynamic.Core.ConsoleTestApp.net40/ConsoleApp_net40_sqlite_original.csproj
@@ -97,6 +97,12 @@
Helpers\TestEnum.cs
+
+ Helpers\Models\UserProfileDetails.cs
+
+
+ Helpers\Models\UserState.cs
+
diff --git a/src/System.Linq.Dynamic.Core/DynamicExpressionParser.cs b/src/System.Linq.Dynamic.Core/DynamicExpressionParser.cs
index 50ac719d..327901df 100644
--- a/src/System.Linq.Dynamic.Core/DynamicExpressionParser.cs
+++ b/src/System.Linq.Dynamic.Core/DynamicExpressionParser.cs
@@ -173,7 +173,7 @@ public static LambdaExpression ParseLambda([NotNull] Type itType, [CanBeNull] Ty
[PublicAPI]
public static LambdaExpression ParseLambda([CanBeNull] ParsingConfig parsingConfig, [NotNull] Type itType, [CanBeNull] Type resultType, string expression, params object[] values)
{
- return ParseLambda(true, itType, resultType, expression, parsingConfig, values);
+ return ParseLambda(parsingConfig, true, itType, resultType, expression, values);
}
///
diff --git a/test/System.Linq.Dynamic.Core.Tests/DynamicExpressionParserTests.cs b/test/System.Linq.Dynamic.Core.Tests/DynamicExpressionParserTests.cs
index da600982..4af2f273 100644
--- a/test/System.Linq.Dynamic.Core.Tests/DynamicExpressionParserTests.cs
+++ b/test/System.Linq.Dynamic.Core.Tests/DynamicExpressionParserTests.cs
@@ -32,6 +32,11 @@ public class ComplexParseLambda3Result
public int TotalIncome { get; set; }
}
+ public class CustomClassWithStaticMethod
+ {
+ public static int GetAge(int x) => x;
+ }
+
private class TestCustomTypeProvider : AbstractDynamicLinqCustomTypeProvider, IDynamicLinkCustomTypeProvider
{
private HashSet _customTypes;
@@ -44,6 +49,7 @@ public virtual HashSet GetCustomTypes()
}
_customTypes = new HashSet(FindTypesMarkedWithDynamicLinqTypeAttribute(new[] { GetType().GetTypeInfo().Assembly }));
+ _customTypes.Add(typeof(CustomClassWithStaticMethod));
return _customTypes;
}
}
@@ -413,5 +419,27 @@ public void ParseLambda_IllegalMethodCall_ThrowsException()
})
.Throws().WithMessage("Methods on type 'Stream' are not accessible");
}
+
+ [Fact]
+ public void ParseLambda_CustomMethod()
+ {
+ var config = new ParsingConfig
+ {
+ CustomTypeProvider = new TestCustomTypeProvider()
+ };
+
+ var context = new CustomClassWithStaticMethod();
+ var original = $"{nameof(CustomClassWithStaticMethod)}.{nameof(CustomClassWithStaticMethod.GetAge)}(10)";
+ int result = 0;
+ Check.ThatCode(() =>
+ {
+ var expression = System.Linq.Dynamic.Core.DynamicExpressionParser.ParseLambda(config, typeof(CustomClassWithStaticMethod), null, original);
+ Delegate del = expression.Compile();
+ result = (int) del.DynamicInvoke(context);
+ })
+ .DoesNotThrow();
+
+ Check.That(result).IsEqualTo(10);
+ }
}
}