private IEnumerable<EventsCalendarReport> GetEventsCalendarReport(SPWeb web, EventsCalendarEntity[] events, IEnumerable<EventsCalendarSubscriberEntity> subscribers, DateTime fromDate, DateTime toDate)
        {
            foreach (var subscriber in subscribers)
            {
                var subscriberEvents =
                    events.Where(item => item.TargetAudience.HasIntersections(subscriber.TargetAudience)).ToArray();
                if (!subscriberEvents.Any())
                    continue;

                var reportEvents = GetSubscriberTargetEvents(subscriber.TargetAudience, subscriberEvents);
                var subscriberReport = new EventsCalendarReport
                {
                    EmailTo = subscriber.Email,
                    FromDate = fromDate,
                    ToDate = toDate,
                    Events = reportEvents
                };

                yield return subscriberReport;
            }
        }
        private static IEnumerable<TargetEvents> GetSubscriberTargetEvents(IEnumerable<string> subscriberTargetAudience, EventsCalendarEntity[] subscriberEvents)
        {
            foreach (var targetAudience in subscriberTargetAudience)
            {
                var targetEvents = subscriberEvents.Where(item => item.TargetAudience.Contains(targetAudience));
                if (!targetEvents.Any())
                    continue;

                var reportEventsEntry = new TargetEvents { Target = targetAudience, Events = targetEvents };
                yield return reportEventsEntry;
            }
        }