C# 从委托筛选器表达式获取对象<;Func<;T、 布尔>&燃气轮机;
使用lambda委托表达式>-其中我的表达式接受角色对象(POCO) 希望使用该POCO角色对象并将其映射到具有匹配属性的数据层角色对象。为此,我需要能够从委托中获取角色对象 例如:C# 从委托筛选器表达式获取对象<;Func<;T、 布尔>&燃气轮机;,c#,linq,lambda,expression,C#,Linq,Lambda,Expression,使用lambda委托表达式>-其中我的表达式接受角色对象(POCO) 希望使用该POCO角色对象并将其映射到具有匹配属性的数据层角色对象。为此,我需要能够从委托中获取角色对象 例如: public List<Role> FindAll(Expression<Func<Role, bool>> filter) r是类型Role,在FindAll函数中,我可以看到filter有一个参数,如下所示: 我能提取那个物体吗?怎么做 我确信它一定是可行的,毕竟,lin
public List<Role> FindAll(Expression<Func<Role, bool>> filter)
r是类型Role,在FindAll函数中,我可以看到filter有一个参数,如下所示:
我能提取那个物体吗?怎么做
我确信它一定是可行的,毕竟,linq一直在内部执行它…这里有两个角色:
r
,它表示过滤器参数,和role
,它是由lambda表达式关闭的对象。我假设您的意思是希望引用角色
对象,因为您已经找到了表示r
的参数表达式
该对象将是一个类型为Role
的ConstantPression
,它将是MemberAccessExpression
的Expression
属性的值,该属性表示角色。名称
。这将是表示相等性测试的BinaryOperator
表达式的右侧,用作lambda表达式的Body
这就是你所需要的吗?你为什么要复制
Where
?你试过把它们转换成专门的表达式吗?@leppie 1)你是什么意思,“我为什么要复制Where
?2) 参数[0]的类型为ParameterExpression-到目前为止,我还没有找到任何可以转换为自己类型的属性,但我仍在尝试。调试器已经为您列出了所有类型。就这样吧,viola,你有你在调试器中看到的属性。这是一项相当琐碎的任务,不涉及魔法:)@Theevillebo为什么你不能准确地投下它?是和否。不,这不是我真正想要的——但阅读你的解释有助于明确为什么它不起作用。(r=>r.name=role.name)只是一种可能的筛选器类型。我可以很容易地说(r=>r.name=“Fred”)-这永远不会有角色对象,所以当然,为什么会有那个对象。。。
FindAll(r => r.Name == role.Name);