Sto usando la Dynamic Linq Library per analizzare un'espressione booleana. In questo metodo:
public static LambdaExpression Parse(SearchQuery query)
{
string compilableExpression = BuildCompilableExpression(query);
ParameterExpression parameter = System.Linq.Expressions.Expression.Parameter(typeof(EventListItem));
return System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { parameter }, null, compilableExpression);
}
BuildCompilableExpression
restituisce questa stringa:
"long.Parse(InstanceID.ToString()) == long.Parse(\"2\")"
Che è corretto ( InstanceID
è una proprietà in EventListItem
), tuttavia, la chiamata a ParseLambda()
riesce con questa eccezione:
No property or field 'long' exists in type 'EventListItem'
Ho provato ad analizzare un'espressione che contiene string.Compare()
e che funziona bene, quindi non capisco perché long.Parse()
non funziona. Mi stavo solo chiedendo se qualcuno lo avesse mai fatto. Qualsiasi aiuto è apprezzato.
long
non è il nome di un tipo, è una scorciatoia fornita da C #. Int64
è il nome tecnico, l'hai provato? Allo stesso modo String
è il nome del tipo di stringa.
Si noti che la string
potrebbe aver funzionato perché mentre C # fa distinzione tra maiuscole e minuscole, l'analizzatore può o meno esserlo.
Il tipo long
non esiste in .NET. long
è una parola chiave C # ed è un alias per il tipo .NET System.Int64
. Prova a usare Int64.Parse(...)
.