表达式树 - 不包含

Expression tree - not contains

我需要创建一个表达式来搜索一个不包含另一个的字符串。我能够为包含方法创建它:

return Expression.Call(firstOrDefaultCall, typeof(string).GetMethod("Contains"), Expression.Constant(text));

如何转换为'not contains'?

你一般会怎么写?

var stringValue = "foo"
var result = !stringValue.Contains("o");

注意 Contains() 之前的逻辑否定运算符 !。那是您唯一缺少的部分。要在构建表达式时取反布尔值,请使用 Expression.Not():

return Expression.Not(
    Expression.Call(
        firstOrDefaultCall, 
        typeof(string).GetMethod("Contains"), 
        Expression.Constant(text)));

并且不要陷入使用 Expression.Negate() 的陷阱。那个是算术取反运算,算术取反的例子:

var negatedPi = Math.PI * -1;