c# - 仅使用 LambaExpression 和比较值创建 Expression<Func<T, bool>> 谓词

标签 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() ,但无法使其正常工作。

最佳答案

您可以按如下方式实现。

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/

相关文章:

c# - 没有 else 的简写 If 语句

c# - 带有和不带有 async 修饰符的异步方法

c# - 使用反射创建实例

c# - 无法编辑 DataGridView 单元格,验证事件集 e.Cancel = true

c# - 为什么我要在 TCP 客户端关闭后强制进行垃圾回收?

Java 8 Stream API toMap 转换为 TreeMap

lambda 表达式的 Java 堆转储分析

c# - 网站扫描中的缓慢 HTTP POST 漏洞问题

c# - asp.net 母版页 css 不适用于 asp 表单页面

c# - 生成特定文本文件的类的重构策略