2009-08-05 7 views
2

Я в основном создаю плоскую модель просмотра для страницы расписания (ASP.NET MVC), которая имеет сетку для дней недели. В свойствах 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); 

с этим вспомогательным методом ...

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

Я бы предположил, что 'Суббота 'и' Пятница' являются нижними и верхними диапазонами для предметов, которые вы извлекаете. Почему они являются свойствами, хотя, и для чего все остальные дни используются? 0.o – Thorarin

+2

Кроме того, я несколько озадачен тем, почему кто-то, у кого есть ваша репутация и репутация SO, нуждаются в других, чтобы сделать это лучше, чем сейчас. Никакого преступления не было, я просто удивлен. – Thorarin

+0

ха-ха ... я думаю, что в тот момент, когда я доволен им в тех целях, которые мне нужны. Сб до Пт устанавливаются, потому что мне нужно ссылаться на них в моем представлении, когда я отправляю обратно на сервер. –

ответ

4

Вот небольшой старт:

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

Вы можете использовать DAYOFWEEK ENUM.

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

link

+0

просто убедитесь, что вы учли первый день недели и локализацию;) –

+0

Еще лучше (?): 'Var dayOfWeek = DateTime.Now.DayOfWeek;' –

+1

А? Как это отвечает на вопрос? OP хочет заполнить кучу свойств рабочими часами, заданными по дням. –

0

Вместо того, чтобы отдельные переменные, могли бы вы карту от DayOfWeek к WorkTime, а другую карту от DayOfWeek к DateTime? К сожалению, мой C# подзабыл, так что это, вероятно, не совсем верно, но если у вас что, то это будет выглядеть следующим образом:

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

Почему не вместо просто один Worktime собственность, и сделать это Словарь и верните словарь (вместо вашего списка) из вашего репозитория рабочего времени.

+0

, хотя это можно сделать, но я действительно хочу, чтобы там была нулевая ссылка в течение нескольких дней, У вас нет рабочего времени. –

+0

Не в словаре = нет рабочего времени? :) Если хотите, вы можете добавить их с помощью значения «null». Ключи не могут быть «null», но значения могут быть. – Thorarin

+0

да, но я думаю о синтаксисе в моем представлении (используя MVC). и я думаю, что с вышесказанным это упростит представление –

4

Почему бы не создать словарь для хранения этих рабочих часов?

private Dictionary<DayOfWeek, WorkTime> _workTimes; 

Наполнение этого словаря, используя _workTimeRepository.GetByWorkAssignmentID, должен быть очень простым.

Смежные вопросы