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