Dodanie wywołania metody do wyrażenia Linq przy zachowaniu pełnego wyrażenia
Jak rozszerzam wyrażenie linq, zachowując jednocześnie wyrażenie? Uprościłem to trochę (aby uniknąć wklejania stron) - .e.g Pracuję z Queryable zamiast Enumerable, ale rozwiązanie tego wystarczy, ostatecznie muszę zachować to jako wyrażenie, dodając do niego wywołanie metody.
Na przykładL
var p1 = new Person() {Name = "RDA1", Age = 27};
var p2 = new Person() {Name = "RDA2", Age = 28};
var p3 = new Person() {Name = "RDA3", Age = 29};
var people = new[] {p1, p2, p3};
Expression<Func<IEnumerable<Person>, IEnumerable<Person>>> filterExp
= list => list.Take(2);
Expression<Func<Person, int>> sortExp = l => l.Age;
MethodCallExpression orderByCallExpression = Expression.Call(
typeof (Enumerable),
"OrderByDescending",
new Type[] {typeof (Person), typeof (int)},
filterExp.Parameters[0],
sortExp);
var combinedExpression = Expression.Lambda<Func<IEnumerable<Person>, IEnumerable<Person>>>
(filterExp.AddMethodCall(orderByCallExpression)); // made up AddMethodCall but you get the idea
Przeszukałem kilkadziesiąt postów SO przez ostatnie kilka godzin i nie potrafię tego zrozumieć, mogę to zrobić, jeśli kompiluję filterExp, ale nie bez zachowania obu wyrażeń i wyniku końcowego jako wyrażenia.