转换自表达式<func <tmodel,string =“”>&gt;表达式<func <tmodel,bool =“”>&gt; </func <tmodel,> </func <tmodel,>

时间:2013-08-16 14:16:00

标签: c# asp.net-mvc visual-studio-2012

我想要的是,如果我有像'e =&gt;这样的表达式e.Name'和值'Brad',我想把它组成/修改为'e =&gt; e.Name.Contain(“Brad”)'或'e =&gt; e.Name ==“Brad”'。

我写的如下:

    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;
    }

当触发查询时,我不断收到错误“参数u未绑定在指定的LINQ to Entities查询表达式中”。

请你指出我在这里做错了什么?

非常感谢你的帮助

1 个答案:

答案 0 :(得分:1)

source.Body引用原始lambda中的ParameterExpression,你从未在新lambda中声明过。{
1}} 您的新u参数永远不会被使用。

您应该重复使用source.Parameters[0]而不是创建新参数。