如何在C#中使用Expression类中的Contains方法?

时间:2014-01-10 13:55:47

标签: c# asp.net linq expression

以下是我的代码:

    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方法的东西(这样它就可以找到包含部分信息的记录,而无需输入完整的值)。

1 个答案:

答案 0 :(得分:2)

您想使用Expression.Call方法:

var filter = Expression.Call(mex, 
    typeof(string).GetMethod("Contains"), 
    constForeignKeyID);

这等于以下表达式:

x => x.Prop.Contains(searchString)

希望这有帮助。