考虑这段代码:
public class Foo
{
public int a { get; set; }
public int b { get; set; }
}
private void Test()
{
List<Foo> foos = new List<Foo>();
foos.Add(new Foo());
foos.Add(new Foo());
Expression<Func<Foo, int>> exp0 = f => f.a * f.b;
Expression<Func<int>> exp1 = () => foos[0].a * foos[0].b;
Expression<Func<int>> exp2 = () => foos[1].a * foos[1].b;
}
Run Code Online (Sandbox Code Playgroud)
你怎么能把exp0它变成两个与exp1和相同的表达式exp2.请注意,我不想仅为exp0每个Fooin 评估foos,而是获得两个新表达式.
[更新]:
基本上,我希望能够扩大或"扁平化"传递给A的表达Linq扩展方法,如Sum入枚举每个项目一个表达,因为这些枚举是静态的,因为我已经有代码读取不表达获取参数(然后将它们转换为另一种语言). …
如果我有一个函数委托的表达式,它接受许多参数,如下所示:
Expression<Func<int, int, int, bool>> test = (num1, num2, num3) => num1 + num2 == num3;
Run Code Online (Sandbox Code Playgroud)
是否有一种方式/如何替换其中一个值(比如5 num1)并获得等效表达式:
Expression<Func<int, int, bool>> test = (num2, num3) => 5 + num2 == num3;
Run Code Online (Sandbox Code Playgroud)
编辑:
还需要解决复杂类型,例如:
Expression<Func<Thing, int, int>> test = (thing, num2) => thing.AnIntProp + num2;
Run Code Online (Sandbox Code Playgroud)