创建表达式>谓词只有LambaExpression和比较值

本文关键字:LambaExpression 比较 谓词 Func boolean 创建 表达式 | 更新日期: 2023-09-27 18:18:28

我需要创建一个Expression<Func<T, bool>>,但我所拥有的只是一个LambaExpression的属性进行比较和用于比较的值。

如果我硬编码它,这就是谓词的样子,这是我需要实现的,但不知道如何实现。

string comparisonValue = "something";
Expression<Func<Person, bool>> predicate = person => person.Name == comparisonValue;

我有以下内容:

LambdaExpression expression = PropertyExpression<Person>(t => t.Name);

是否有一种方法来生成硬编码谓词像上面只是一个属性LambdaExpression和值比较?

我试过使用LambdaExpression.Equal(),但不能让它工作。

创建表达式<Func<T, boolean >>谓词只有LambaExpression和比较值

可以这样实现。

Expression<Func<TSource, bool>> EqualToExpression<TSource, TValue>(
    Expression<Func<TSource, TValue>> selectValue, TValue targetValue)
{
    return Expression.Lambda<Func<TSource, bool>>(
        Expression.Equal(
            selectValue.Body,
            Expression.Constant(targetValue)),
        selectValue.Parameters);
}

按如下方式使用

Expression<Func<Person, string>> selectName = p => p.Name;
Expression<Func<Person, bool>> compareName = EqualToExpression(selectName, "John");