3

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」タイプです。

これはすべて、ラムダ式に関する知識の欠如に関連していると確信しています。誰が私が間違っているのか教えてもらえますか?

4

1 に答える 1

8

StringContainsすでに a を返しますLambdaExpression

別のラムダ式に入れないでください。
それを含む別のラムダ式を作成する場合は、そのBody.

于 2011-08-01T19:44:51.440 に答える