我有这门课:
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/