Преобразование SQL-запроса с помощью команды ФОРМАТИРОВАНИЯ для использования в ядре entity framework

#entity-framework-core

Вопрос:

У меня есть SQL-запрос:

 SELECT 
                FORMAT(datetime_scrapped, 'MMMM-yy') [date], 
                count(FORMAT(datetime_scrapped, 'MMMM-yy')) as quantity 
                FROM scrap_log 
                GROUP BY FORMAT(datetime_scrapped, 'MMMM-yy')
 

Он в основном суммирует все записи в таблице scrap_log по месяцам/годам и подсчитывает, сколько записей в каждом месяце/году. Возвращает два столбца (дата и количество). Но мне нужно выполнить это в ASP.NET базовый API с использованием ядра Entity Framework. Я попытался использовать .fromSqlRaw(), но при этом ожидается, что будут возвращены все столбцы, и поэтому это не работает.

Я могу найти много информации об EF, чтобы реализовать группирование и подсчет и т. Д… Но я ничего не могу найти для части ФОРМАТА(дата-время, «ММММ-гг»). Пожалуйста, не мог бы кто-нибудь объяснить мне, как это сделать?

РЕДАКТИРОВАТЬ: Кажется, я уже, кажется, иду по этому неправильному пути с точки зрения эффективности. Я рассмотрю альтернативные решения на основе уже высказанных замечаний. Спасибо за быстрый ответ.

Комментарии:

1. Не делай этого с самого начала. Производительность этого запроса очень низкая, так как он должен сканировать всю таблицу и группировать данные без использования каких-либо индексов. Вместо этого используйте таблицу календаря (сильно проиндексированную таблицу, предварительно заполненную, например, датами за 20 лет с дополнительными столбцами год, месяц, день и т.д.) И сгруппируйте по столбцам года и месяца таблицы календаря. Это позволит использовать любые индексы в календаре и scraped столбцы для ускорения группировки. Если вы используете фильтрацию, индексы будут использоваться для выбора и группировки только соответствующих строк

2. С текущим запросом, даже если вы попытаетесь отфильтровать данные, серверу все равно придется сканировать всю таблицу, чтобы найти совпадения. Это означает, что даже если бы вы хотели сгруппировать строки за один месяц, вам все равно пришлось бы обрабатывать каждую строку в таблице

3. Обновленный вопрос с редактированием, рассмотрит более эффективный способ сделать это, ура.

4. Проверять Создание измерения или таблицы календаря в SQL Server

5. Спасибо, сделаю