Func<IProduct, string, bool>
является делегатом метода со следующей подписью:
bool methodName(IProduct product, string arg2)
{
//method body
return true || false;
}
так
public static Expression<Func<IProduct, string, bool>> IsValidExpression(string val)
{
return (h => h.product_name == val);
}
имеет разницу между типом возвращаемого значения и возвращаемым значением. вы пытаетесь вернуть объект типа Expression<Func<IProduct, bool>>
.
аргумент val не является аргументом для метода, которому вы делегируете, но будет поднят (сделан частью класса, реализующего результирующую функцию), и, поскольку он не является аргументом для результирующего метода, он не должен быть частью Func
тип объявления