var evList = from e in events >>> where e.StartDate <= end && e.StartDate.AddDays( e.RecurrenceDays ) >= start >>> select e;>>>
var evList = events.Where( e => e.StartDate <= end && e.StartDate.AddDays( e.RecurrenceDays ) >= start);>>>
var evList = events.Where( e => e.WithIn( start, end ));>>>
class Program { static void Main(string[] args) { List<RecurringEvent> events = new List<RecurringEvent>(); events.Add(new RecurringEvent { Id = 1, StartDate = new DateTime(2010, 6, 19), RecurrenceDays = 20 }); events.Add(new RecurringEvent { Id = 2, StartDate = new DateTime(2010, 6, 19), RecurrenceDays = 60}); events.Add(new RecurringEvent { Id = 3, StartDate = new DateTime(2010, 6, 19), RecurrenceDays = 15 }); events.Add(new RecurringEvent { Id = 4, StartDate = new DateTime(2010, 6, 19), RecurrenceDays = 1000 }); DateTime rangeStart = new DateTime(2010, 12, 20); DateTime rangeEnd = new DateTime(2011, 01, 05); var v = from x in events where IsInRange(x, rangeStart, rangeEnd) select x.Id; } static bool IsInRange(RecurringEvent re, DateTime rangeStart, DateTime rangeEnd) { int daysToStart = (rangeStart - re.StartDate).Days; var firstAfterStart = (((int)(daysToStart / re.RecurrenceDays)) + 1) * re.RecurrenceDays; return re.StartDate.AddDays(firstAfterStart) <= rangeEnd; } } public class RecurringEvent { public int Id { get; set; } public DateTime StartDate { get; set; } public int RecurrenceDays { get; set; } }Disclaimer: Don't know if the IsInRange() really works as expected - but you should get the idea.....