using System.Linq.Expressions;
using System.Linq.Dynamic.Core;
using System.Linq.Dynamic.Core.CustomTypeProviders;
public class MyCustomClass {
public int GetSomeValue(int input) {
public string GetFromParamArgs(params string[]? args) {
return string.Join(", ", args ?? Array.Empty<string>());
public static void Main()
var simpleExpression = $"{nameof(MyCustomClass.GetSomeValue)}(2)";
var simpleExpressionParams = new ParameterExpression[] {
Expression.Parameter(typeof(MyCustomClass), nameof(MyCustomClass))
var simpleExpressionParsedLambda = DynamicExpressionParser.ParseLambda(
simpleExpressionParams, null!, simpleExpression
var simpleExpressionCompiledLambda = simpleExpressionParsedLambda.Compile();
var simpleResult = simpleExpressionCompiledLambda.DynamicInvoke(new MyCustomClass());
Console.WriteLine("{0}: {1}", simpleExpression, simpleResult);
var paramargsExpression = $"{nameof(MyCustomClass.GetFromParamArgs)}(\"foo\", \"bar\")";
var paramargsExpressionParams = new ParameterExpression[] {
Expression.Parameter(typeof(MyCustomClass), nameof(MyCustomClass))
var paramargsExpressionParsedLambda = DynamicExpressionParser.ParseLambda(
paramargsExpressionParams, null!, paramargsExpression
var paramargsExpressionCompiledLambda = paramargsExpressionParsedLambda.Compile();
var paramargsResult = paramargsExpressionCompiledLambda.DynamicInvoke(new MyCustomClass());
Console.WriteLine("{0}: {1}", paramargsExpression, paramargsResult);
var multipleParamsExpression = $"{nameof(MyCustomClass)}.{nameof(MyCustomClass.GetSomeValue)}(input)";
var multipleParamsExpressionParams = new ParameterExpression[] {
Expression.Parameter(typeof(MyCustomClass), nameof(MyCustomClass)),
Expression.Parameter(typeof(int), "input")
var multipleParamsExpressionParsedLambda = DynamicExpressionParser.ParseLambda(
multipleParamsExpressionParams, null!, multipleParamsExpression
var multipleParamsExpressionCompiledLambda = multipleParamsExpressionParsedLambda.Compile();
var multipleParamsResult = multipleParamsExpressionCompiledLambda.DynamicInvoke(new MyCustomClass(), 2);
Console.WriteLine("{0}: {1}", multipleParamsExpression, multipleParamsResult);
Console.WriteLine(ex.ToString());