2009-08-05 41 views
2

我基本上是爲一個時間表頁(ASP.NET MVC)創建一個平面視圖模型,該模型有一個星期幾的網格。 WorkTime屬性應該是來自數據庫的現有WorkTime,如果沒有現有WorkTime屬性,則爲null。C#重構這個亂碼!

只會顯示1周(週六到週五)。我在那裏有單獨的屬性,以便我的視圖中的語法應該更簡單。

+------+-----+-----+-----+-----+-----+-----+-----+ 
| Desc | Sat | Sun | Mon | Tue | Wed | Thu | Fri | 
+------+-----+-----+-----+-----+-----+-----+-----+ 
|______|_____|_____|_____|_____|_____|_____|_____| 
|______|_____|_____|_____|_____|_____|_____|_____| 
|______|_____|_____|_____|_____|_____|_____|_____| 
|______|_____|_____|_____|_____|_____|_____|_____| 

所有這一切都來自並保存到數據庫中的日期沒有時間元素(所有午夜小時),週六至週五的DateTime屬性都設置了。

我設置

public WorkTime SaturdayWorkTime { get; private set; } 
public WorkTime SundayWorkTime { get; private set; } 
public WorkTime MondayWorkTime { get; private set; } 
public WorkTime TuesdayWorkTime { get; private set; } 
public WorkTime WednesdayWorkTime { get; private set; } 
public WorkTime ThursdayWorkTime { get; private set; } 
public WorkTime FridayWorkTime { get; private set; } 

當前迭代的屬性...

public DateTime Saturday { get; private set; } 
public DateTime Sunday { get; private set; } 
public DateTime Monday { get; private set; } 
public DateTime Tuesday { get; private set; } 
public DateTime Wednesday { get; private set; } 
public DateTime Thursday { get; private set; } 
public DateTime Friday { get; private set; } 

_workTimes = _workTimeRepository.GetByWorkAssignmentID(WorkAssignment.ID, Saturday, Friday); 
SaturdayWorkTime = GetWorkTimeForDay(DayOfWeek.Saturday); 
SundayWorkTime = GetWorkTimeForDay(DayOfWeek.Sunday); 
MondayWorkTime = GetWorkTimeForDay(DayOfWeek.Monday); 
TuesdayWorkTime = GetWorkTimeForDay(DayOfWeek.Tuesday); 
WednesdayWorkTime = GetWorkTimeForDay(DayOfWeek.Wednesday); 
ThursdayWorkTime = GetWorkTimeForDay(DayOfWeek.Thursday); 
FridayWorkTime = GetWorkTimeForDay(DayOfWeek.Friday); 

這個helper方法...

private WorkTime GetWorkTimeForDay(DayOfWeek dow) 
{ 
    return _workTimes.FirstOrDefault(x => x.Date.DayOfWeek == dow); 
} 
+0

我想'週六'和'週五'是你檢索的項目的上限和下限。爲什麼他們的財產雖然,以及其他所有的日子用於什麼? 0.o – Thorarin 2009-08-05 22:22:04

+2

另外,對於爲什麼某個擁有SO記錄和聲譽的人需要其他人才能使這一點比現在更好,我有些困惑。沒有任何意圖,我只是感到驚訝。 – Thorarin 2009-08-05 22:27:40

+0

哈哈......我想我在滿足於我需要的目的的地方。星期六至星期五設置,因爲我需要在我的視圖中引用它們,當我回發到服務器。 – 2009-08-05 22:33:03

回答

4

這裏有一個小的開始:

private WorkTime GetWorkTimeForDay(DayOfWeek dw) 
{ 
    return workTimes.FirstOrDefault(x => x.Date.DayOfWeek == dw); 
} 
3

你可以使用DAYOFWEEK枚舉。

DateTime now = DateTime.Now; 
var dayOfWeek = now.DayOfWeek; 

link

+0

只是確保你考慮周和本地化的第一天;) – 2009-08-05 21:05:50

+0

更好(?):'var dayOfWeek = DateTime.Now.DayOfWeek;' – 2009-08-05 21:34:17

+1

嗯?這是如何回答這個問題的? OP正想要填補一大堆與白天工作時間密切相關的屬性。 – 2009-08-05 21:44:08

0

而不是由各個變量的,你能不能從DAYOFWEEK映射到工作時間,並從DAYOFWEEK另一個地圖的DateTime?對不起,我的C#是生鏽,所以這可能是不完全正確的,但如果你有這一點,那麼它看起來更像是這樣的:

for (DayOfWeek day : allDays) 
    workTimes(day) = repository.FirstOrDefault(dateTimes(day)); 
0

爲什麼不而不是僅僅有一個工作時間屬性,使之成爲字典並從工作時間庫返回字典(而不是您的列表)。

+0

雖然可以這樣做,但我實際上希望那裏有一個空引用天沒有工作時間。 – 2009-08-05 22:28:19

+0

不是在字典中=沒有工作時間? :)如果你想要的話,你可以添加一個'null'值。鍵不能爲空,但值可以。 – Thorarin 2009-08-05 22:31:25

+0

是的,但我想在我的視圖(使用MVC)的語法。而且我認爲通過上述方法可以使視圖更簡單 – 2009-08-05 22:37:59

4

爲什麼不創建一個字典來存儲這些工作時間?

private Dictionary<DayOfWeek, WorkTime> _workTimes; 

使用_workTimeRepository.GetByWorkAssignmentID填充此字典應該非常簡單。