1
此代码:Lambda表达式:如何分析代表如何作为表达式存储?
var lambda = Products.Where(p => p.name == "chair");
可以这样写代码:
var propertyName = "name";
var value = "chair";
var arg = Expression.Parameter(typeof(Product), "p");
var property = typeof(Product).GetProperty(propertyName);
var comparison = Expression.Equal(
Expression.MakeMemberAccess(arg, property),
Expression.Constant(value));
var lambda = Expression.Lambda<Func<Product, bool>>(comparison, arg).Compile();
如果我有任何Lambda表达式是这样的:
Products.Where(p => p.name.Contains("chair"));
我怎么能确定如何写像上面的表达?有没有办法“调试”表达式树,以便我可以手动编程?
编辑:
我看到有前途的答案here但它并没有与工作代码结束。这里是他们的版本(错误是StartsWith方法给出一个非字符串值):
ParameterExpression p = Expression.Parameter(typeof(Product), "p");
MethodInfo method = typeof(string).GetMethod("StartsWith",
new[] { typeof(string) });
var containsMethodExp = Expression.Call(p, method,
Expression.Constant("root"), p);
也许这样? http://xte.codeplex.com/ – mellamokb 2011-05-16 05:06:22
@mellamokb:bool(string x)=> x.Contains(“chair”)在该软件中产生了异常错误。非常好的建议,但。 – 2011-05-16 05:18:27