从委托过滤器表达式表达式获取对象<func <t,bool>&gt; </func <t,bool>

时间:2012-02-01 16:34:00

标签: c# linq lambda expression

使用lambda委托表达式&gt; - 我的表达式采用角色对象(PO​​CO)。

希望使用该POCO Role对象并将其映射到具有匹配属性的数据层Role对象。为此,我需要能够从委托中获取Role对象。

示例:

public List<Role> FindAll(Expression<Func<Role, bool>> filter)

将此方法称为:

FindAll(r => r.Name == role.Name);

r是类型Role,在FindAll函数中,我可以看到过滤器有一个参数,如下:

enter image description here

我可以提取该对象吗?如何?

我确信它必须是可行的,毕竟,linq一直在内部做...

1 个答案:

答案 0 :(得分:2)

这里有两个角色:r,表示过滤器参数,role,是一个由lambda表达式关闭的对象。我认为您的意思是希望引用role对象,因为您已找到代表ParameterExpression的{​​{1}}。

该对象将是r,其类型为ConstantExpression,它将是Role的{​​{1}}属性的值,代表Expression 。这将是表示相等性测试的MemberAccessExpression表达式的右侧,它用作lambda表达式的role.Name

这就是你需要的吗?