从 Expression> 转换为 Expression
本文关键字:Func Expression 转换 TMode TModel string | 更新日期: 2023-09-27 18:27:54
我想要的是,如果我有像'e => e.Name'这样的表达式和一个值'Brad',我想把它组合/修改为'e => e.Name.Contain("Brad"('或'e => 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 到实体查询表达式中"。
你能指出我在这里做错了什么吗?
非常感谢您的帮助
source.Body
引用原始 lambda 中的ParameterExpression
,您永远不会在新 lambda 中声明该 lambda。
永远不会使用新的u
参数。
应重用source.Parameters[0]
而不是创建新参数。
本文关键字:Func Expression 转换 TMode TModel string | 更新日期: 2023-09-27 18:27:54
我想要的是,如果我有像'e => e.Name'这样的表达式和一个值'Brad',我想把它组合/修改为'e => e.Name.Contain("Brad"('或'e => 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 到实体查询表达式中"。
你能指出我在这里做错了什么吗?
非常感谢您的帮助
source.Body
引用原始 lambda 中的ParameterExpression
,您永远不会在新 lambda 中声明该 lambda。
永远不会使用新的u
参数。
应重用source.Parameters[0]
而不是创建新参数。