Skip to content

Commit a6b1fc3

Browse files
author
Isaac Ouellet-Therrien
committed
Handle case where expression is MemberExpression
This fixes zzzprojects#722
1 parent ceefdfe commit a6b1fc3

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

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

+19-10
Original file line numberDiff line numberDiff line change
@@ -2006,23 +2006,32 @@ private Expression ParseEnumerable(Expression instance, Type elementType, string
20062006
private Type ResolveTypeFromArgumentExpression(string functionName, Expression argumentExpression, int? arguments = null)
20072007
{
20082008
string argument = arguments == null ? string.Empty : arguments == 1 ? "first " : "second ";
2009+
20092010
switch (argumentExpression)
20102011
{
20112012
case ConstantExpression constantExpression:
2012-
switch (constantExpression.Value)
2013-
{
2014-
case string typeName:
2015-
return ResolveTypeStringFromArgument(typeName);
2013+
return ResolveTypeFromExpressionValue(functionName, constantExpression, argument);
2014+
2015+
case MemberExpression memberExpression:
2016+
_expressionHelper.TryUnwrapAsConstantExpression(memberExpression, out var unwrappedConstantExpression);
2017+
return ResolveTypeFromExpressionValue(functionName, unwrappedConstantExpression, argument);
2018+
default:
2019+
throw ParseError(_textParser.CurrentToken.Pos, Res.FunctionRequiresNotNullArgOfType, functionName, argument, "ConstantExpression");
2020+
}
2021+
}
20162022

2017-
case Type type:
2018-
return type;
2023+
private Type ResolveTypeFromExpressionValue(string functionName, ConstantExpression? constantExpression, string argument)
2024+
{
2025+
switch (constantExpression?.Value)
2026+
{
2027+
case string typeName:
2028+
return ResolveTypeStringFromArgument(typeName);
20192029

2020-
default:
2021-
throw ParseError(_textParser.CurrentToken.Pos, Res.FunctionRequiresNotNullArgOfType, functionName, argument, "string or System.Type");
2022-
}
2030+
case Type type:
2031+
return type;
20232032

20242033
default:
2025-
throw ParseError(_textParser.CurrentToken.Pos, Res.FunctionRequiresNotNullArgOfType, functionName, argument, "ConstantExpression");
2034+
throw ParseError(_textParser.CurrentToken.Pos, Res.FunctionRequiresNotNullArgOfType, functionName, argument, "string or System.Type");
20262035
}
20272036
}
20282037

0 commit comments

Comments
 (0)