2011-08-01 10 views
2

contains演算子を使用してlinq式を動的に作成しようとしています。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]' 戻り型ため を使用することができない "DAL.BestAvailableFIP" が "TEntity" タイプである '可能System.Boolean'

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

答えて

8

StringContainsはすでにLambdaExpressionを返します。

別のラムダ式に入れないでください。
これを含む別のラムダ式を作成する場合は、Bodyを使用する必要があります。