Linq Lambda表达式:如何分析如何将委托存储为表达式?

Linq Lambda表达式:如何分析如何将委托存储为表达式?,linq,linq-to-entities,expression-trees,Linq,Linq To Entities,Expression Trees,此代码: 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 =

此代码:

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();
我怎样才能确定如何写出上面的表达式?有没有一种方法可以“调试”表达式树,以便手动编程

编辑:

我看到了有希望的答案,但最终并没有得到有效的代码。以下是它们的版本(错误是StartsWith方法被赋予了非字符串值):


让编译器来完成这项工作

如果你不是

func<string,bool> MyLambda = p => p.name.Contains("chair");
func MyLambda=p=>p.name.Contains(“主席”);

Expression MyExpression=p=>p.name.Contains(“椅子”);
然后你会得到一个很好的“MyExpression”,你可以在调试器中检查它。

可能是这样的@mellamokb:bool(string x)=>x.Contains(“chair”)在该软件中产生了一个异常错误。很好的建议。
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);
func<string,bool> MyLambda = p => p.name.Contains("chair");
Expression<func<string,bool>> MyExpression = p => p.name.Contains("chair");