Когда мне приходилось справляться с этой проблемой, чтобы заполнить отсутствующие даты, я на самом деле создал справочную таблицу, в которой содержались все даты, которые мне интересны, и присоединился к таблице данных в поле даты. Это грубо, но это работает.
SELECT DATE(r.date),count(d.date)
FROM dates AS r
LEFT JOIN table AS d ON d.date = r.date
GROUP BY DATE(r.date)
ORDER BY r.date ASC;
Что касается вывода, я бы просто использовал SELECT INTO OUTFILE вместо генерации CSV вручную. Остается нам не беспокоиться о том, чтобы избежать специальных символов.
Вы можете создать статическую ссылку на свой распознаватель IoC и использовать ее в Global.asax. Вы даже можете добавить его в Global.asax.cs. Установите это свойство после регистрации контейнера и используйте его из любого места.
public static YourIocResolver IocResolver { get; set; }
Из документации по Внедрение зависимостей :
IIocResolver (и IIocManager) также имеют метод расширения CreateScope (определенный в Abp.Dependency. namespace) для безопасного освобождения всех разрешенных зависимостей.
В конце использования блока все разрешенные зависимости автоматически удаляются.
blockquote>Если вы находитесь в статическом контексте или не можете внедрить IIocManager, в качестве крайней меры вы можете использовать одноэлементный объект IocManager.Instance везде.
blockquote>Итак, используйте область с
IocManager.Instance
:
using (var scope = IocManager.Instance.CreateScope()) { ... }
→IocManager.Instance.UsingScope(scope => { ... })
protected void Session_Start() { // Starting a session and already authenticated means we have an old cookie var existingUser = System.Web.HttpContext.Current.User; if (existingUser != null && existingUser.Identity.Name != "") { IocManager.Instance.UsingScope(scope => // Here { // Execute app service here. var srv = scope.Resolve<SettingsAppService>(); srv.UpdateItems(); }); } }