Я пытаюсь создать дерево выражений, похожий на выполнение подзапросов, как (?):арифметические операции над подзапросов с использованием Expression.Subtract
SELECT (SELECT Sum(Foo) FROM Bar1) - (SELECT Sum(Foo) FROM Bar2))
Я пытаюсь повторно использовать 2 деревьев выражений, которые являются слишком сложными повторить.
То, что я прямо сейчас 2 (упрощенный) деревья выражений:
Expression<Func<Bar, int>> SumBar1 =
(bar) => (from b in bar.Something
where b.Type = 1
select b).Sum();
Expression<Func<Bar, int>> SumBar2 =
(bar) => (from b in bar.Something
where b.Type = 2
select b).Sum();
Я уже пытался использовать Expression.Subtract
:
Expression foo = Expression.Subtract(SumBar1, SumBar2);
Это терпит неудачу с ошибкой:
The binary operator Subtract is not defined for the types 'System.Func
2[Bar,System.Int32]' and 'System.Func
2[Bar,System.Int32]'.
Я также пробовал использовать Expression.Invoke
для вызова деревьев:
Expression.Subtract ( Expression.Invoke (SumBar1, Expression.Parameter (TypeOf (бар)), Expression.Invoke (SumBar2, Expression.Constant (TypeOf (бар))));
Но я получаю:
The LINQ expression node type 'Invoke' is not supported in LINQ to Entities.
Есть ли способ в сочетании двух деревьев выражений в новое дерево, вычитая их, проходя по параметру?
Большое спасибо за это! –