-
-
Notifications
You must be signed in to change notification settings - Fork 237
Labels
Description
1. Description
I'm trying to create an Excel-like function syntax using nested static classes. I'm experiencing difficulties with some class names and nested classes. Below is the Fiddle code:
using System;
using System.Collections.Generic;
using System.Linq.Dynamic.Core;
using System.Linq.Dynamic.Core.CustomTypeProviders;
using System.Linq.Expressions;
public class Program
{
public static void Main()
{
var config = new ParsingConfig
{
CustomTypeProvider = new CustomTypeProvider(new[] { typeof(IST), typeof(IST.NOT) })
};
// Not working;
var expression = "IS.NULL(null)";
try
{
var result = DynamicExpressionParser.ParseLambda(
config,
false,
new ParameterExpression[] { },
typeof(bool),
expression
);
Console.WriteLine($"{expression} success");
}
catch (Exception ex)
{
Console.WriteLine(
$"{expression} failed, because of {ex.GetType().FullName} with message {ex.Message}"
);
}
// Working;
expression = "IST.NULL(null)";
try
{
var result = DynamicExpressionParser.ParseLambda(
config,
false,
new ParameterExpression[] { },
typeof(bool),
expression
);
Console.WriteLine($"{expression} success");
}
catch (Exception ex)
{
Console.WriteLine(
$"{expression} failed, because of {ex.GetType().FullName} with message {ex.Message}"
);
}
// Not working;
expression = "IS.NOT.NULL(null)";
try
{
var result = DynamicExpressionParser.ParseLambda(
config,
false,
new ParameterExpression[] { },
typeof(bool),
expression
);
Console.WriteLine($"{expression} success");
}
catch (Exception ex)
{
Console.WriteLine(
$"{expression} failed, because of {ex.GetType().FullName} with message {ex.Message}"
);
}
// Not working;
expression = "IST.NOT.NULL(null)";
try
{
var result = DynamicExpressionParser.ParseLambda(
config,
false,
new ParameterExpression[] { },
typeof(bool),
expression
);
Console.WriteLine($"{expression} success");
}
catch (Exception ex)
{
Console.WriteLine(
$"{expression} failed, because of {ex.GetType().FullName} with message {ex.Message}"
);
}
}
public class CustomTypeProvider : DefaultDynamicLinqCustomTypeProvider
{
private readonly HashSet<Type> _types;
public CustomTypeProvider(Type[] types)
{
_types = new HashSet<Type>(types);
}
public override HashSet<Type> GetCustomTypes()
{
return _types;
}
}
public static class IS
{
public static bool NULL(object value) => value == null;
public static class NOT
{
public static bool NULL(object value) => value != null;
}
}
public static class IST
{
public static bool NULL(object value) => value == null;
public static class NOT
{
public static bool NULL(object value) => value != null;
}
}
}
2. Exception
Fiddle output:
IS.NULL(null) failed, because of System.Linq.Dynamic.Core.Exceptions.ParseException with message '(' expected
IST.NULL(null) success
IS.NOT.NULL(null) failed, because of System.Linq.Dynamic.Core.Exceptions.ParseException with message '(' expected
IST.NOT.NULL(null) failed, because of System.Linq.Dynamic.Core.Exceptions.ParseException with message Identifier expected