我需要创建一个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/