以下是我的代码:
protected Expression<Func<T, bool>> GetLambdaForField(string SearchTxtBox)
{
// Build a Lamda expression to get the Node headers for this sub master.
ConstantExpression constForeignKeyID = Expression.Constant(SearchTxtBox);
ParameterExpression paramEntity =
Expression.Parameter(typeof(T), "e");
MemberExpression mex =
LambdaExpression.PropertyOrField(paramEntity, DefaultSearchFieldName);
BinaryExpression filter = Expression.Equal(mex, constForeignKeyID);
Expression<Func<T, bool>> exprLambda =
Expression.Lambda<Func<T, bool>>(filter,
new ParameterExpression[] { paramEntity });
return exprLambda;
}
我使用过Expression.Equal(...);
但这不是我真正想要实现的目标。
我想要类似Expression.Contains
方法的东西(这样它就可以找到包含部分信息的记录,而无需输入完整的值)。
答案 0 :(得分:2)
您想使用Expression.Call方法:
var filter = Expression.Call(mex,
typeof(string).GetMethod("Contains"),
constForeignKeyID);
这等于以下表达式:
x => x.Prop.Contains(searchString)
希望这有帮助。