【发布时间】:2014-10-17 10:37:04
【问题描述】:
我需要以第二个表达式“包含”第一个表达式的方式组合两个 lambda 表达式。 我搜索了很多,但没有找到任何明确的答案......
我想要做的是以下内容: 第一个表达式“expression1”作为参数传递给方法,并简单地用于定义第二个 lambda 必须对哪个字段或属性进行操作。
从原理上讲,我正在尝试执行以下操作:
// simple field selector :
Expression<Func<T, string>> expression1 = obj => obj.field;
// trying to use the field selector in 2nd expression :
Expression<Func<T, bool>> e2 = obj => [[Result of expression1]].Equals("myValue");
换句话说,我想得到:
Expression<Func<T, bool>> e2 = obj => obj.field.Equals("myValue");
我需要这样做,因为并不总是会调用 Equals() 方法,而是会调用许多不同的方法。
我试图将表达式 1 编译为 Func<T, string> 以便在表达式 2 中调用此 Func,但是当我将它与 LinQ 一起使用时,我得到了一个异常,因为 LinQ 不支持调用节点类型。
所以我的问题是:有没有办法将两个表达式的主体结合起来,请问如何?
提前致谢!
【问题讨论】:
标签: c# linq lambda expression