Ответ 1
Вам нужно получить MethodInfo
, представляющий метод string.StartsWith(string)
, а затем использовать Expression.Call
, чтобы построить выражение, представляющее вызов instancemethod:
var property = Expression.Property(item, "Name");
var method = typeof(string).GetMethod("StartsWith", new[] { typeof(string) });
var argument = Expression.Constant("Dish");
// item.Name.StartsWith("Dish")
var startsWithDishExpr = Expression.Call(property, method, argument);
Затем вам нужно будет &&
подвыражения, чтобы создать тело.
var lambdaBody = Expression.AndAlso(idMoreThanFive, startsWithDishExpr);
И затем, наконец, построим лямбда:
var lambda = Expression.Lambda<Func<Item, bool>>(lambdaBody, item);