Potrzebuję stworzyć dynamiczną ekspresję linq i zacząłem pracę z wieloma przykładami. Testowałem niektóre i niektóre prace, a niektóre nie. W tym przypadku chcę stworzyć metodę, która wygląda tak:Dynamiczne wyrażenie Linq z wartością zwracaną
public bool Check(int intvar)
{
if (i > 2)
return true;
else
return false;
}
Teraz Pisałem następujące:
LabelTarget returnTarget = Expression.Label("label");
ParameterExpression para = Expression.Parameter(typeof(int), "intvalue");
Expression test = Expression.GreaterThan(para, Expression.Constant(5));
Expression iftrue = Expression.Return(returnTarget, Expression.Constant(true));
Expression iffalse = Expression.Return(returnTarget, Expression.Constant(false));
Expression.IfThenElse(test, iftrue, iffalse);
this.TheExpression = Expression.IfThenElse(test, iftrue, iffalse);
Expression.Lambda<Action<int>>(
this.TheExpression,
new ParameterExpression[] { para }
).Compile()(5);
Teraz rzuca InvalidOperationException
:
nie może przeskoczyć do etykiety "etykieta" `
Co jest nie tak? Potrzebuję tylko zwrotu prawda lub fałsz.
Czy możesz powiedzieć nam coś więcej o tym, co staramy się osiągnąć? Na przykład, dlaczego trzeba dynamicznie tworzyć to wyrażenie ... i dlaczego trzeba używać etykiet, a jeśli \ else, gdy można napisać: public bool Check (int intvar) { return i> 2; } –