contains 演算子を使用して linq 式を動的に作成しようとしています。
このトピックに関連するいくつかの投稿を読んだ後、「contains」のような評価を実行できる次のコードを思いつきました。
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」タイプです。
これはすべて、ラムダ式に関する知識の欠如に関連していると確信しています。誰が私が間違っているのか教えてもらえますか?