C# 将一棵表达式树一分为二(或两棵新的表达式树,逻辑划分)
C# Make one expression tree into two (or two new expression trees with divided logic)
这个问题已经用相反的方式回答了,但是还原逻辑说起来容易做起来难。
所以让我给你一个非常具体的例子:
我有这个:
- e => e.Description == "总和" && e.Summary == "asd"
我想将其拆分为:
- e => e.Description == “总和”
- e => e.Summary == "asd"
在实际的 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]);
这个问题已经用相反的方式回答了
所以让我给你一个非常具体的例子:
我有这个:
- e => e.Description == "总和" && e.Summary == "asd"
我想将其拆分为:
- e => e.Description == “总和”
- e => e.Summary == "asd"
在实际的 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]);