Expression.ToString()
довольно дорого.
Другая проблема состоит в том, что Expression
всегда являются недавно созданными объектами, поэтому они никогда не будут иметь одинаковую ссылку, поэтому использование этого в качестве ключа проблематично.
Еще одна проблема (которая не затрагивает вас (пока)) - это рассмотрение всех возможных комбинаций параметров.
Единственное, что я могу предложить - это забыть о Expression
и просто использовать Func<R>
напрямую.