Как мне добиться того же результата, что и:
var q = db.TableA.AsQueryable();
var q1 = Queryable.SelectMany(q, a => a.TableB, (a, t) => new { a = a, t = t });
var q2 = Queryable.SelectMany(q1, a=> a.a.TableC, (a, t) = new { a = a, t = t });
путем создания дерева выражений с помощью Expression.Call:
MethodCallExpression returnCallExpression = Expression.Call(
typeof(Queryable),
"SelectMany",
new Type[] ??????,
query.Expression,
a => a.TableB,
(a, t) => new { a = a, t = t });
Я исследую другие перегрузки Expression.Call, чтобы узнать, можно ли это сделать без объявления типа.
Моя проблема в том, что число SelectManys определяется во время выполнения, поэтому я не могу просто их связать. И каждый SelectMany изменяет анонимный тип IQueryable, поэтому у меня возникают проблемы с обходом, не зная тип во время компиляции.
Будем весьма благодарны за любые идеи о том, как применить n номеров SelectMany к IQueryable.