public static void SendLogRecords(string taskName, int sendReportIntervalInSeconds, EventLogEntryType ReportInformationLevel = EventLogEntryType.Error) { using (var connection = Connection) { var task = GetTask(connection, taskName); var lastReportSentDateTime = GetLastGroupReportSent(task); if (lastReportSentDateTime.AddSeconds(sendReportIntervalInSeconds) > DateTime.Now) { return; } var messageGroups = connection.GetCollection <MessageGroup>(nameof(MessageGroup)).FindAll().Where(t => t.Task.Id == task.Id && t.EntryType <= ReportInformationLevel && !t.MessageSent); var taskLoggingList = (from messageGroup in messageGroups select connection.GetCollection <Message>(nameof(Message)).FindAll().Where(t => t.MessageGroup.Id == messageGroup.Id && t.EntryType <= ReportInformationLevel).OrderBy(t => t.DateTime) into messagesList select messagesList.Select(t => new LogMessage.MessageStruct() { Message = $"ID {t.Id} {t.MessageText}", EntryType = t.EntryType, DateTime = t.DateTime }) into messages select TaskLogging.GetTaskLogging(task.TaskName, messages)).ToList(); if (taskLoggingList.Count == 0) { return; } var result = ReportMailSender.SendLogArray(taskLoggingList); if (!result) { return; } foreach (var messageGroup in messageGroups) { messageGroup.MessageSent = true; connection.GetCollection <MessageGroup>(nameof(MessageGroup)).Update(messageGroup); } } }