2013-08-16 76 views
1

我想要的是,如果我的表達式如'e => e.Name'和值'Brad'我想編寫/修改它爲'e => e.Name.Contain(「Brad」)'或'e => e.Name ==「Brad」'。從表達式<Func <TModel,字符串>>轉換爲表達式<Func <TModel,bool >>

我寫象下面這樣:

public Expression<Func<TModel, bool>> ToBool(Expression<Func<TModel, object>> source, string value) 
    { 
     ParameterExpression paramExpression = Expression.Parameter(typeof(TModel), "u"); 
     ConstantExpression valueExpression = Expression.Constant(value, typeof(string)); 
     BinaryExpression equalValue = Expression.MakeBinary(ExpressionType.Equal, source.Body, valueExpression); 
     Expression<Func<TModel, bool>> lambdaResult = Expression.Lambda<Func<TModel, bool>>(equalValue, new ParameterExpression[] { paramExpression }); 
     return lambdaResult; 
    } 

我不斷收到錯誤的查詢被觸發時「來查詢實體表達ü沒有在指定的LINQ綁定的參數」。

請您指出我在這裏做錯了什麼?

非常感謝您的幫助

回答

1

source.Body引用​​從原來的λ,您從未在新的拉姆達聲明。
您的新u參數從不使用。

您應該重複使用source.Parameters[0]而不是創建新參數。

+0

它的工作原理!感謝您節省這個初學者! ;) – user2349247

相關問題