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");