我需要将第二个表达式“包含”第一个表达式的方式合并为两个lambda表达式。 我搜索了很多,但没有发现任何明确的答案......在另一个lambda表达式中使用lambda表达式
什么,我试图做的是以下几点: 的第一表现“表达式”作为参数的方法通过,并仅用于定义第二个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");
我需要做的是这种方式,因为它并不总是该方法将被调用,但有许多不同的方法。
我试图将expression1编译为Func<T, string>
以便在expression2中调用此Func,但是因为我在LinQ中使用此函数,所以我得到一个异常,因为LinQ不支持Invoke节点类型。
所以我的问题是:有没有一种方法来结合两个表达式的主体,请问如何?
感谢提前!
谢谢Chris Eelmaa。您的解决方案在经典环境中运行良好。不幸的是,当我使用LinQ时,我在运行时得到以下System.NotSupportedException:LINQ to Entities不支持LINQ表达式节点类型“Invoke”。 – 2014-10-17 12:47:50
@ Numer_11:更新后。这是你在找什么? – 2014-10-17 14:24:06
是的!我测试了你的新答案,但仍然有例外。之后,我删除了.Compile()调用,并将Create方法的返回类型更改为匹配。最后,这个小小的修改与LinQ完美结合!非常感谢 ! (发布修改以使其他人明确) – 2014-10-17 15:02:30