J'utilise la bibliothèque Dynamic Linq pour analyser une expression booléenne. Dans cette méthode:
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
renvoie cette chaîne:
"long.Parse(InstanceID.ToString()) == long.Parse(\"2\")"
Ce qui est correct ( InstanceID
est une propriété dans EventListItem
), cependant, l'appel à ParseLambda()
échoue avec cette exception:
No property or field 'long' exists in type 'EventListItem'
J'ai essayé d'analyser une expression qui contient string.Compare()
et qui fonctionne très bien, donc je ne comprends pas pourquoi long.Parse()
ne fonctionne pas. Je me demandais simplement si quelqu'un avait déjà fait ça. Toute aide est appréciée.
long
n'est pas le nom d'un type, c'est un raccourci fourni par C #. Int64
est le nom technique, avez-vous essayé cela? De même, String
est le nom du type de chaîne.
Notez que la string
peut avoir fonctionné car, bien que C # soit sensible à la casse, l'analyseur peut ou non l'être.
Le type long
n'existe pas dans .NET. long
est un mot clé C # et est un alias pour le type .NET System.Int64
. Essayez d'utiliser Int64.Parse(...)
.