На мой взгляд, вы должны сделать что-то подобное
- Иметь общий метод для загрузки объектов в память и кэшировать их как список / словарь ... все, что подходит вам в одноэлементном классе BL
- Ваши запросы Linq, выполняющие сортировку / поиск, должны выполняться в коллекции кэшированных объектов в вашем классе BL, а не напрямую в вашей базе данных MySQL.
Таким образом, в случае, когда первый вызов выполнен, ваша кэшированная коллекция запрашивается, но, поскольку она все еще пуста, вы идете и выбираете все объекты (конечно, это зависит от объема данных), а затем, когда в памяти ваши запросы LINQ выполняются на нем.
Последующие вызовы не попадут в БД, а только в кешированную коллекцию.
Вы должны обратить внимание, чтобы иметь доступ к вашей коллекции потокобезопасным. Кроме того, вы можете включить некоторые интервалы обновления, в основном временные метки, на основе которых вы обновляете кеш через определенные фиксированные интервалы.