private static IValueExpression ParseExpression(string expression, bool allowMethod)
{
if (allowMethod && (expression.IndexOf("(", StringComparison.Ordinal) > 0)) {
if (expression.EndsWith(")", StringComparison.Ordinal)) {
return ParseMethodCall(expression);
}
return null;
}
if (expression.StartsWith("'", StringComparison.Ordinal) &&
expression.EndsWith("'", StringComparison.Ordinal)) {
return new LiteralExpression(expression.Substring(1, expression.Length - 1));
}
bool boolValue;
if (Boolean.TryParse(expression, out boolValue)) {
return new LiteralExpression(boolValue);
}
int intValue;
if (Int32.TryParse(expression, out intValue)) {
return new LiteralExpression(intValue);
}
double doubleValue;
if (Double.TryParse(expression, out doubleValue)) {
return new LiteralExpression(doubleValue);
}
return ParsePropertyAccess(expression);
}