c# - 如何从 lambda 表达式获取值?

标签 c# .net lambda expression-trees

我有这门课:

public class CustomerFilter
{
    public int Id { get; set; }
    public int Name { get; set; }
}

它的用法如下:

public class Search
{
    private Expression<Func<CustomerFilter, bool>> customerfilter;

    public Expression<Func<CustomerFilter, bool>> CustomerFilter
    {
        set { customerfilter = value; }
    }
}

var search = new Search();
search.CustomerFilter = (x => x.Id == 1);

在搜索类中,如何在不使用 ExpressionVisitor 的情况下获取属性值?像这样的东西:

var customerId = customerFilter.Id; //Or something similar

最佳答案

不太明白为什么需要它。但是,你可以这样做:

public class Search
{
    private Expression<Func<CustomerFilter, bool>> customerfilter;

    public Expression<Func<CustomerFilter, bool>> CustomerFilter
    {
        set { customerfilter = value; }
    }

    public object GetValue(CustomerFilter filter)
    {
        var property = (customerfilter.Body as BinaryExpression).Left;
        var lambda =Expression.Lambda(property, customerfilter.Parameters.First());
        return lambda.Compile().DynamicInvoke(filter);
    }
}

这样的用法:

var search = new Search();
search.CustomerFilter = (x => x.Id == 1);
var filter = new CustomerFilter {Id = 12};
search.GetValue(filter).Dump();

我得到12作为输出

关于c# - 如何从 lambda 表达式获取值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42385812/

相关文章:

c# - 使用 PointToScreen 在 wpf 中查找控件的位置

c# - 在 Dictionary 与 HashCode 和 Equals() 中使用 IEqualityComparer 的效率

c# - 如何将 DataReader 中的值放入 List<T>?

Java 8 Lambda,过滤器 HashMap,无法解析方法

java - 使用 Lambda 将 List<Person> 转换为 Map<Integer, List<Integer>>

c# - 如何按日期部分订购?

c# - 在异步方法中根据 Id 锁定

c# - DependencyResolver.Current.GetService 总是返回 null

asp.net - HTTP 错误 403.14 - 访问网站时出现禁止错误

.net - 什么时候应该使用静态 IoC 容器?