Я хотел бы использовать один лямбда-выражение в качестве аргумента метода Enumerable.Select, и добавить это как новое связывание с лямбда-выражения родителя, как показано:включая детский дерево выражения с вызовом Enumerable.Select
Expression<Func<Bar, BarDto>> MapBar = b => new BarDto { BarInt = b.BarInt };
Expression<Func<Foo, FooDto>> MapFoo = f => new FooDto { FooInt = f.FooInt };
Expression<Func<Foo, FooDto>> expressionIWant = f => new FooDto
{
FooInt = f.FooInt,
Bars = f.Bars.Select(b => new BarDto { BarInt = b.BarInt })
};
, где я получил до сих пор:
я есть ExpressionVisitor содержащий:
protected override Expression VisitMemberInit(MemberInitExpression node)
{
var newBindings = new[]
{
Expression.Bind(_pi, _newExpr),
};
node = node.Update(
node.NewExpression,
node.Bindings.Concat(newBindings));
return node;
}
я, очевидно, нужно включить что-то вдоль линий
var typeArgs = _originalChildExpression.Type.GenericTypeArguments;
_newExpr = Expression.Call(typeof(Enumerable),"Select",typeArgs,???source???,
_originalChildExpression);
где ??? источник ??? представляет f.Bars
в expressionIWant
вверху. Как это можно достичь? Большое спасибо.