2011-07-31 47 views
1

我有日期时间范围:如何从日期范围获取日期时间列表?

var _checkInYear = (from d in db.bookings select d.checkinyear).ToList(); 
var _checkInMonth = (from d in db.bookings select d.checkinmonth).ToList(); 
var _checkInDay = (from d in db.bookings select d.checkinday).ToList(); 

var _checkOutYear = (from d in db.bookings select d.checkoutyear).ToList(); 
var _checkOutMonth = (from d in db.bookings select d.checkoutmonth).ToList(); 
var _checkOutDay = (from d in db.bookings select d.checkoutday).ToList(); 

我怎样才能从这个范围DateTime名单?例如,如果入住时间为20/08/2011,并且23/08/2011需要在此范围内列入日期时间。

20/08/2011,21/08/2011,22/08/2011,23/08/2011。

+2

嗯,这可能是问题的目的,一个人为的例子,但我担心这甚至不会做你想要什么。你可能会更好使用'var checkInData = bookings.Select(new DateTime(d.CheckinYear,d.CheckinMonth,d.CheckinDay))。ToList();'等。除此之外,很难给你提供的东西回答你的问题。你能否进一步扩大? –

回答

3
DateTime checkIn = new DateTime(_checkInYear, _checkInMonth, _checkInDay); 
DateTime checkOut = new DateTime(_checkOutYear, _checkOutMonth, _checkOutDay); 

TimeSpan span = checkOut - checkIn; 
List<DateTime> range = new List<DateTime>(); 
for(int day = 0; day <= span.Days; day++) 
{ 
    range.Add(checkIn.AddDays(day)); 
} 

例子:http://www.ideone.com/BxmkF

2

算法很简单,获取你的出发点,递增,直到你到达终点。

var startDate = new DateTime(checkInYear, checkInMonth, checkInDay); 
var endDate = new DateTime(checkOutYear, checkOutMonth, checkOutDay); 
var givenDate = startDate; 
var datesInRange = new List<DateTime>(); 

while (givenDate <= startDate) 
{ 
    datesInRange.Add(givenDate); 
    givenDate = givenDate.AddDays(1); 
} 

// work with/return datesInRange 
0

既然你让你的手两个日期,最好的办法就是使用一个forwhile循环:

var dates = new List<DateTime>(); 
var curDate = booking.CheckinDate; 
while (curDate <= booking.CheckoutDate) 
{ 
    dates.Add(curDate); 
    curDate = curDate.AddDays(1); 
} 

然而,我很欣赏这可能是针对这个问题的一个人为的例子,但我担心你r示例代码不会做你想要的。不要理会进一步阅读,如果是这样的话,我只是想强调它的关闭的机会,你可能会像这样的东西更好:

var booking = (from b in data.Bookings 
       where b.BookingId = bookingId 
       select new BookingSearchResult // You have to create this class 
          { 
           CheckinDate = new DateTime(b.CheckinYear, b.CheckinMonth, b.CheckinDay), 
           CheckoutDate = new DateTime(b.CheckoutYear, b.CheckoutMonth, b.CheckoutDay) 
          }).SingleOrDefault(); 
1

如果你能得到检查和退房退房手续日期,那么你可以有一个扩展方法为DateTime获得列表:

public static class ExtensionMethods 
{ 
    static IEnumerable<DateTime> GetDateRange(this DateTime d, DateTime e) 
    { 
     var t=d; 
     do 
     { 
      yield return t; 
      t=t.AddDays(1); 
     }while(t<e); 
    } 
} 

然后使用它是这样的:

var dateList = checkIn.GetDateRange(checkOutDate); 

测试中Linqpad。

0

有点老问题,但我想我们应该这样做艾克说:

DateTime checkIn = new DateTime(_checkInYear, _checkInMonth, _checkInDay); 
DateTime checkOut = new DateTime(_checkOutYear, _checkOutMonth, _checkOutDay); 
List<DateTime> allDates = new List<DateTime>(); 

for (DateTime date = checkIn; date <= checkOut; date = date.AddDays(1)) 
    allDates.Add(date);