2016-03-08 52 views
1

目前我試圖做一個查詢,基於星期幾從該數據庫中獲取電影。 所以電影周是從週四到下週三。 當它的星期天,我只想從星期天到星期三的電影。 如果它的星期二,我只想從週二到週三等電影 我真的被困在你可以做什麼,不能做任何建議嗎?指定當前星期基於一週的天數asp.net mvc 5

這裏是我到目前爲止的代碼:

public IEnumerable<Viewing> GetUpcomingWeekViews() 
    { 
     var viewingList1 = _efdbContext.Viewing.ToList(); 

     DateTime currentDate = DateTime.Now.Date; 
     var viewingList = _efdbContext.Viewing.ToList(); 

     DateTime startOfWeek = DateTime.Now. 

     return viewingList.Where(v => (
      v.StartTime.Date == currentDate.Date) && 
      (v.StartTime.TimeOfDay > currentDate.TimeOfDay) 
     ).OrderBy(v => v.StartTime); 
    } 
+0

Date您可以使用[DateTime.DayOfWeek(https://msdn.microsoft.com/en-us/library/system。 datetime.dayofweek(v = vs.110).aspx)屬性來做你的計算 –

回答

0

使用的DateTimeDayOfWeek屬性:使用

var date = DateTime.Now; 
var currentWeekday = (int)date.DayOfWeek; 
const int wednesday = 3; // sunday is 0 

var offset = 0; 
// if today is before wednesday, go to next wednesday 
if (currentWeekday < wednesday) { 
    offset = wednesday - currentWeekday; 
} 
// if today is wednesday, add a whole week till next wednesday 
if(currentWeekday == wednesday) { 
    offset = 7; 
} 
// if today is after wednesday, go to wednesday in a week 
if(currentWeekday > wednesday) { 
    offset = wednesday - currentWeekday + 7; 
} 

var nextWednesday = date.AddDays(offset); 

Fiddle

0

首先計算從當前日期到所需的日期偏移DateOfWeek

public int CalculateOffset(DayOfWeek current, DayOfWeek desired) { 
    // f(c, d) = [7 - (c - d)] mod 7 
    // f(c, d) = [7 - c + d] mod 7 
    // c is current day of week and 0 <= c < 7 
    // d is desired day of the week and 0 <= d < 7 
    int c = (int)current; 
    int d = (int)desired; 
    int offset = (7 - c + d) % 7; 
    return offset == 0 ? 7 : offset; 
} 

,並添加偏移量的當前DateTime

public IEnumerable<Viewing> GetUpcomingWeekViews(DayOfWeek desiredDayOfWeek = DayOfWeek.Thursday) { 
    DateTime minStartTime = DateTime.Now; 
    var currentDayOfWeek = minStartTime.DayOfWeek; 

    int offset = CalculateOffset(currentDayOfWeek, desiredDayOfWeek); 

    DateTime maxStartTime = minStartTime.Date.AddDays(offset); 

    var viewingList = dbContext.Viewing.ToList(); 

    return viewingList 
     .Where(v => minStartTime <= v.StartTime && v.StartTime < maxStartTime) 
     .OrderBy(v => v.StartTime); 
} 
相關問題