Ответ 1
В следующем запросе
var result = query.Where(item => item.Name == "Soap")
выражение лямбда
item => item.Name == "Soap"
Вам нужно только построить эту часть, а не приглашение Where, которое принимает дерево выражений.
Дерево выражений для выражения лямбда выглядит так:
Lambda
/ \
Equal Parameter
/ \ item
Property \
"Name" Constant
| "Soap"
Parameter
item
В коде:
var item = Expression.Parameter(typeof(Item), "item");
var prop = Expression.Property(item, "Name");
var soap = Expression.Constant("Soap");
var equal = Expression.Equal(prop, soap);
var lambda = Expression.Lambda<Func<Item, bool>>(equal, item);
var result = queryableData.Where(lambda);