从委托过滤器表达式获取对象表达式>
使用 lambda 委托表达式> - 我的表达式采用角色对象(POCO)。
希望使用 POCO Role 对象并将其映射到具有匹配属性的数据层 Role 对象。为此,我需要能够从委托获取 Role 对象。
示例:
public List<Role> FindAll(Expression<Func<Role, bool>> filter)
像这样调用此方法:
FindAll(r => r.Name == role.Name);
r 是 Role 类型,在 FindAll 函数中,我可以看到过滤器有一个参数,如下所示:
我可以提取该对象吗?又如何呢?
我确信它一定是可行的,毕竟 linq 一直在内部执行它......
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这里有两个角色:
r
,它代表过滤器参数,以及role
,它是一个由 lambda 表达式封闭的对象。我假设您的意思是您想要对role
对象的引用,因为您已经找到了代表r
的ParameterExpression
。该对象将是一个
ConstantExpression
,其类型为Role
,并且它将是MemberAccessExpression
的Expression
属性的值code> 代表role.Name
。这将是表示相等测试的BinaryOperator
表达式的右侧,用作 lambda 表达式的Body
。这是你所需要的吗?
There are two roles here:
r
, which represents the filter parameter, androle
, which is an object that is closed over by the lambda expression. I assume you mean you want a reference to therole
object, since you already found theParameterExpression
which representsr
.That object will be a
ConstantExpression
whose type isRole
, and it will be the value of theExpression
property of theMemberAccessExpression
which representsrole.Name
. That will be the right-hand side of theBinaryOperator
expression representing the equality test, which serves as theBody
of the lambda expression.Is that what you need?