作为WPF应用程序我建立表达式树和产生谓词作为过滤器的一部分来使用。该代码看起来是这样的:使用lambda表达式参数到另一个表达式?
public Expression BuildExpression(Expression parameter, string value)
{
MethodInfo toStringMethod = new Func<Object, string>((a) => a.ToString()).Method;
Expression lhs = Expression.Call(parameter, toStringMethod);
ConstantExpression rhs = Expression.Constant(value);
BinaryExpression result = Expression.Equal(lhs, rhs);
return result;
}
这是因为该参数是未知类型的表达式 - 这可能是一个整数,字符串,GUID或其他任何东西。问题在于没有丰富的评论很难理解这里发生的事情。我真的很想在这里使用一个拉姆达:
return parameter => parameter.ToString() == value;
的问题是,因为预期这不起作用 - 产生的代表将在表达式调用toString(),而不是表达的价值。如果有帮助,参数是MemberExpression。
一种可能性我之前没考虑 - 我想我可以用一个ExpressionVisitor(见https://stackoverflow.com/questions/457316/combining-two-expressions-expressionfunct-bool),使这项工作。 '表达<谓词