То, что вы ищете, вероятно, примерно так:
public static Expression<Func<TSource, bool>> SearchMethod<TSource>(SearchDetails searchDetails)
{
ParameterExpression par = Expression.Parameter(typeof(TSource), "x");
var col = Expression.Property(par, searchDetails.ColName);
Expression body = Expression.Call(col, "Contains", null, Expression.Constant(searchDetails.SearchVal));
var lambda = Expression.Lambda<Func<TSource, bool>>(body, par);
return lambda;
}
Обратите внимание, что вам нужно где-то передать тип вашей таблицы, в данном случае в качестве универсального параметра TSource
.
Используйте это как:
var search = new SearchDetails
{
ColName = "Foo",
SearchVal = "Bar",
};
var lambda = SearchMethod<TbStore>(search);
В качестве альтернативы вы можете использовать System.Linq.Dynamic.Core , чтобы получить нечто подобное.
var result = db.Where(searchDetails.ColName + ".Contains(@0)", searchDetails.SearchVal);