C# 将一棵表达式树一分为二(或两棵新的表达式树,逻辑划分)

C# Make one expression tree into two (or two new expression trees with divided logic)

这个问题已经用相反的方式回答了,但是还原逻辑说起来容易做起来难。

所以让我给你一个非常具体的例子:

我有这个:

我想将其拆分为:

在实际的 linq 方式中,我想实现这个:

        var t = list
            .Where(e => e.Description == "sum" && e.Summary == "asd")
            .Take(2)
            .ToList();

// 到

        var x = list
            .Where(e => e.Description == "sum")
            .Where(l => l.Summary == "asd")
            .Take(2)
            .ToList();

我知道结果是一样的,我想在单独的 linq 表达式中使它们 运行。

谢谢。

好吧,没有额外的类型检查:

var lambda = // assign first

var binary = (BinaryExpression)lambda.Body;

var lambdaLeft = Expression.Lambda<Func<Some, bool>>(binary.Left, lambda.Parameters[0]);

var lambdaRight = Expression.Lambda<Func<Some, bool>>(binary.Right, lambda.Parameters[0]);