有谁知道如何使用 Linq 表达式创建 .Contains(string) 函数,甚至创建谓词来完成此操作
public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,
Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
}
类似的东西会是理想的吗?
public static Expression<Func<string, bool>> StringContains(string subString)
{
MethodInfo contains = typeof(string).GetMethod("Contains");
ParameterExpression param = Expression.Parameter(typeof(string), "s");
var call = Expression.Call(param, contains, Expression.Constant(subString, typeof(string)));
return Expression.Lambda<Func<string, bool>>(call, param);
}
...
// s => s.Contains("hello")
Expression<Func<string, bool>> predicate = StringContains("hello");
多年以后再看这个问题,我突然意识到对于这个特定的例子有一个更简单的方法:
Expression<Func<string, bool>> predicate = s => s.Contains("hello");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)