Я бы предпочел пойти по сохраненному маршруту процедуры, с оговоркой о предоставлении пользователю возможности фильтровать результаты в соответствии с тем, что они ищут.Затем, возможно, кэшируйте результаты вместе с параметрами запроса и просматривайте данные в кэше, прежде чем выполнять сохраненный процесс, чтобы убедиться, что у вас еще нет результатов для этого конкретного критерия поиска.
Размещение такого количества данных в сеансе не является хорошей идеей, поскольку эта информация не будет совместно использоваться несколькими пользователями (так как она находится в сеансе), а также снизит производительность в долгосрочной перспективе.И если вы расширите свою область до уровня приложения, было бы лучше использовать механизм кэширования, чтобы уменьшить объем используемой памяти в вашем приложении.
Только мой 2c,
Надеюсь, это поможет.
Редактировать: Если я правильно помню, DataTables не Serializable, поэтому вы не сможете сохранить их в сеансе в любом случае, вам придется использовать набор данных или набор данных.