【问题标题】:Convert expression tree from equal to contains将表达式树从等于转换为包含
【发布时间】:2018-06-24 04:45:57
【问题描述】:

在我的服务器中,我目前有一个方法可以检查对象的字段是否等于给定的字符串,它看起来像这样:

var parameter = Expression.Parameter(typeof(Book), "b");
var predicate = Expression.Lambda<Func<Book, bool>>(Expression.Equal(Expression.PropertyOrField(parameter, filterAfter), Expression.Constant(filterField)),parameter);

举例来说,如果 filterAfter 是 "title" 并且 filterField 是 "Castle",那么表达式会做 book.title == "Castle"。我想要做的是转换上面的表达式以检查 book.title 是否在标题中包含子字符串“Castle”。我怎样才能做到这一点?

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    使用Expression.Call

    var containsMethod = typeof(string).GetMethod(nameof(string.Contains), new[] {typeof(string)});
    var predicate = Expression.Lambda<Func<Book, bool>>(
        Expression.Call(
            Expression.PropertyOrField(parameter, filterAfter)
        ,   containsMethod
        ,   new Expression[] { Expression.Constant(filterField) }
        )
    ,   parameter
    );
    

    【讨论】:

    • 看起来有效。不知道 Expression.Call 可以做到这一点。谢谢:D
    猜你喜欢
    • 2018-03-05
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    相关资源
    最近更新 更多