9

Linq Expressions を使用して .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);
}

これに似たものが理想的でしょうか?

4

2 に答える 2

5
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");
于 2010-03-17T09:29:16.963 に答える