Во-первых, вы можете унаследоваться от Dictionary и не переизобретать методы:
class AbstractExpressionList<T>: Dictionary<string, Func<T, T>> { }
Во-вторых, ваш метод Execute уже написан авторами LINQ и называется Enumerable.Aggregate. Внутри он устроен примерно так:
public T Aggregate(IEnumerable<T> values, T accumulator, Func<T, T> projection)
{
var current = accumulator;
foreach(var value in values)
current = projection(current, value);
return current;
}
Вам понадобится начальное значение, от которого цикл будет двигаться. Можете использовать первый элемент в списке, или default(T), или передавать пользовательское значение.
Поскольку ваш класс будет унаследован от Dictionary, который в свою очередь реализует IEnumerable, то вы можете использовать Aggregate напрямую, не реализовывая самостоятельно:
var data = new AbstractExpressionList<T>
{
["a"] = ...,
["b"] = ...
};
var result = data.Aggregate(...);