Посмотрите на это.
Если я не понял, пожалуйста, дайте мне знать.
List<MyClass> dates = new List<MyClass>();
dates.Add(new MyClass { StartDate = new DateTime(2009, 01, 01), EndDate = new DateTime(2009, 01, 08) });
dates.Add(new MyClass { StartDate = new DateTime(2009, 01, 15), EndDate = new DateTime(2009, 01, 20) });
dates.Add(new MyClass { StartDate = new DateTime(2009, 01, 22), EndDate = new DateTime(2009, 01, 31) });
DateTime sDate = new DateTime(2009, 01, 07);
DateTime eDate = new DateTime(2009, 01, 25);
var result = (from d in dates
orderby d.StartDate
where !(eDate < d.StartDate || sDate > d.EndDate)
select new
{
Days = (d.EndDate <= eDate && d.StartDate >= sDate ? d.EndDate.Subtract(d.StartDate).Days:
sDate >= d.StartDate && sDate <= d.EndDate && eDate >= d.EndDate ? d.EndDate.Subtract(sDate).Days:
eDate >= d.StartDate && eDate <= d.EndDate && sDate <= d.StartDate ? eDate.Subtract(d.StartDate).Days:
eDate <= d.EndDate && sDate >= d.StartDate ? eDate.Subtract(sDate).Days : 0)
}).Sum(x => x.Days);
int total = result;