创建表达式<func <t,bool =“”>&gt;谓词只有LambaExpression和比较值

时间:2015-10-19 20:29:06

标签: c# .net lambda

我需要创建一个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(),但无法让它发挥作用。

1 个答案:

答案 0 :(得分:2)

您可以按如下方式实现此目的。

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