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; } }