Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从委托筛选器表达式获取对象<;Func<;T、 布尔>&燃气轮机;_C#_Linq_Lambda_Expression - Fatal编程技术网

C# 从委托筛选器表达式获取对象<;Func<;T、 布尔>&燃气轮机;

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

使用lambda委托表达式>-其中我的表达式接受角色对象(POCO)

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

例如:

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);