Этот код:
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();
Если у меня есть какое-нибудь лямбда-выражение, подобное этому:
Products.Where( p => p.name.Contains("chair") );
Как я могу определить, как написать выражение, как указано выше? Есть ли способ отладки дерева выражений, чтобы я мог запрограммировать его вручную?
EDIT:
Я видел многообещающие ответы здесь , но это не заканчивалось рабочим кодом. Вот их версия (ошибка в том, что методу 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);