我需要创建一个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(),但无法使其正常工作。

最佳答案

您可以如下实现。

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");

关于c# - 仅使用LambaExpression和比较值创建Expression <Func <T,bool >>谓词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33223347/

10-12 00:00
查看更多