C# 一个大表达式包含另一个表达式

C# 一个大表达式包含另一个表达式,c#,C#,我是表达式树的新手,我正在寻找一个表达式,该表达式可能包含另一个表达式,并且可以在代码中的不同位置将这些另一个表达式动态添加到自身中 看看这个例子: public void DoSomething() { var ex1 = Expression.Call(....); // something else happens here var ex2 = Expression.Loop(...); // again something else foreach(va

我是表达式树的新手,我正在寻找一个表达式,该表达式可能包含另一个表达式,并且可以在代码中的不同位置将这些另一个表达式动态添加到自身中

看看这个例子:

public void DoSomething()
{
   var ex1 = Expression.Call(....);

   // something else happens here

   var ex2 = Expression.Loop(...);

  // again something else

  foreach(var item in items)
  {
     var ex3 = Expression.And(...);
  }

  var everythingInOneExpression = .. // here I would like to have all expressions in one
}
正如您在伪代码中所看到的,有一些表达式正在被创建,其中一个甚至在foreach中,我希望它们最终都在一个大表达式中

很难解释,但那个大的是一个列表,它运行子表达式并执行它们,或者类似的东西。除了它不是一个列表,它是一个表达式。:)

有这么大的表情吗。我希望你能在这件事上跟我来

编辑:


大的一个将运行它的项/表达式,并将它们与and运算符链接起来执行。

我认为PredicateBuilder就是您要寻找的。检查。如果您想深入了解linq表达式树,还可以查看MSDN引用


希望我能帮忙

您可以使用
Expression.Block
Expression.Lambda
,它们可以从表达式列表中创建。

您的问题是什么?在“串联表达式”中,您的“子表达式”之间的关系应该是什么?大表达式将通过其子表达式运行,并将它们与and运算符链接,然后执行它们。所以只需使用
表达式。和
?您将在何处使用表达式。和?什么意思?您可能会丢失在foreach中创建的表达式。类似于
var finalExpression=Expression.And(ex1,Expression.And(ex2,Expression.And(ex3,ex4)))
顺便说一句,如果要重用在foreach中创建的表达式,应该在循环之外声明它。Expression.Block不能动态更改。是的,这太棒了。我喜欢那家伙耍花招的方式。:)