Skip to content

Instantly share code, notes, and snippets.

@margusmartsepp
Last active April 13, 2016 10:52
Show Gist options
  • Save margusmartsepp/38f557e1b604323b95d1c8968c408364 to your computer and use it in GitHub Desktop.
Save margusmartsepp/38f557e1b604323b95d1c8968c408364 to your computer and use it in GitHub Desktop.
C# predicate example
public List<int> GetWeekdaysWithIntervalOverlaps(IEnumerable<int> selectedWeekdays, ChannelPlaylistPlaytimeRuleInterval interval, int channelPlaylistId)
{
var playtimeRules = GetChannelPlaylistPlaytimeRules(channelPlaylistId);
var overlappingDays = selectedWeekdays
.Where(weekdayIndex => IsOverlapped(playtimeRules, interval, weekdayIndex))
.ToList();
return overlappingDays;
}
public bool IsWeekdayWithIntervalOverlaps(int selectedWeekday, ChannelPlaylistPlaytimeRuleInterval interval, int channelPlaylistId, int channelPlaylistItemId)
{
var playtimeRules = GetChannelPlaylistPlaytimeRules(channelPlaylistId)
.Where(o => o.ID != channelPlaylistItemId);
return IsOverlapped(playtimeRules, interval, selectedWeekday);
}
private Func<int, bool> IsWeekdayOverlapped(ChannelPlaylistPlaytimeRuleInterval interval, IQueryable<ChannelPlaylistPlaytimeRule> playtimeRules)
{
return weekdayIndex => IsOverlapped(playtimeRules, interval, weekdayIndex);
}
public List<int> GetWeekdaysWithIntervalOverlaps(IEnumerable<int> selectedWeekdays, ChannelPlaylistPlaytimeRuleInterval interval, int channelPlaylistId)
{
var playtimeRules = GetChannelPlaylistPlaytimeRules(channelPlaylistId);
var overlappingDays = selectedWeekdays
.Where(IsWeekdayOverlapped(interval, playtimeRules))
.ToList();
return overlappingDays;
}
public bool IsWeekdayWithIntervalOverlaps(int selectedWeekday, ChannelPlaylistPlaytimeRuleInterval interval, int channelPlaylistId, int channelPlaylistItemId)
{
var playtimeRules = GetChannelPlaylistPlaytimeRules(channelPlaylistId)
.Where(o => o.ID != channelPlaylistItemId);
return IsWeekdayOverlapped(interval, playtimeRules)(selectedWeekday);
}
private static Func<ChannelPlaylistPlaytimeRule, bool> IsOverlappingSelectedWeekdayInterval(int selectedWeekday, ChannelPlaylistPlaytimeRuleInterval interval)
{
return o => o.WeekdayID == selectedWeekday && interval.IsOverlapped(o);
}
public List<int> GetWeekdaysWithIntervalOverlaps(IEnumerable<int> selectedWeekdays, ChannelPlaylistPlaytimeRuleInterval interval, int channelPlaylistId)
{
var playtimeRules = GetChannelPlaylistPlaytimeRules(channelPlaylistId).ToList();
var overlappingDays = selectedWeekdays
.Where(selectedWeekday => playtimeRules.Any(IsOverlappingSelectedWeekdayInterval(selectedWeekday, interval)))
.ToList();
return overlappingDays;
}
public bool IsWeekdayWithIntervalOverlaps(int selectedWeekday, ChannelPlaylistPlaytimeRuleInterval interval, int channelPlaylistId, int channelPlaylistItemId)
{
var playtimeRules = GetChannelPlaylistPlaytimeRules(channelPlaylistId)
.Where(o => o.ID != channelPlaylistItemId);
return playtimeRules.Any(IsOverlappingSelectedWeekdayInterval(selectedWeekday, interval));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment