Я пытаюсь динамически создать выражение linq с оператором содержимого.
После прочтения нескольких сообщений, связанных с этой темой, я пришел к следующему коду, который позволяет мне выполнять «содержит» какоценка:
internal static Expression<Func<TEntity, bool>> StringContains<TEntity>(string propertyName, string subString)
{
MethodInfo contains = typeof(JsonLinqParser_Paser).GetMethod("Like");
var param = Expression.Parameter(typeof(TEntity));
var body = Expression.Call(contains, Expression.Property(param, propertyName), Expression.Constant(subString, typeof(string)));
var lambda = Expression.Lambda<Func<TEntity, bool>>(body, param);
return lambda;
}
public static bool Like(string a, string b)
{
return a.Contains(b);
}
И это называется так:
var expression = Expression.Lambda<Func<TEntity, bool>>(StringContains<TEntity>("FIPSCO_STR", _myStringValue), param);
Однако во время выполнения я получаю сообщение об ошибке:
Выражениетип 'System.Func`2 [DAL.BestAvailableFIP, System.Boolean]' нельзя использовать для типа возвращаемого значения 'System.Boolean'
, где "DAL.BestAvailableFIP" - это тип "TEntity".
Я уверен, что все это связано с моим недостатком знаний о лямбда-выражениях.Может кто-нибудь сказать мне, что я делаю не так?