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