2013-08-10 2 views
0

Я столкнулся с довольно сложной ситуацией, поэтому мне сложно определить правильное название для этого вопроса. Я объясню более подробно, так голый со мной!Recur каждые x недель

Я разрабатываю приложение WPF, которое использует ORM (EntityFramework). Приложение позволяет пользователю планировать определенные задачи. Эти задачи могут повторяться каждые x недель. Например: Обслуживание Google.com каждые 2 недели (начиная с понедельника).

Как я хранил это как следует. У меня есть объект Task с полем «StartDate», который является датой начала первой задачи. Я также создал поле под названием «Recur» (я знаю, что имена могут быть лучше). Поле «Recur» содержит количество недель, которое должна повторить определенная задача. Поэтому в моем примере выше он содержит номер 2, поскольку обслуживание на Google.com должно выполняться каждые 2 недели.

Теперь наступает ситуация, с которой я столкнулся; Я хочу, чтобы пользователь мог получить ВСЕ задания в определенном номере недели. Например: Получить все задания на неделе 42 из 2013 года. Если я выполнил задание, которое повторяется каждую неделю, это означает, что когда я хочу получить все задания недели 42, эта задача должна появиться. Он также должен появиться, когда я получаю все задания на 44, 46, 48 и т. Д.

Как определить, попадает ли задача в определенный номер недели и ее выбор? Я пытался следующее:

context.Werk.Include("Debiteur").Where(o => o.Recur >= EntityFunctions.DiffDays(o.StartDate, today)/7 
                   && EntityFunctions.DiffDays(o.StartDate, today)/7 % o.Recur == 0).ToList(); 

В основном то, что я пытался сделать, это проверить, если количество «повторялись» недели равна или больше, чем сумма даты она отличается между StartDate и сегодня. Я также проверил, не отличается ли количество недель от стартовой, и сегодня нечувствительно к полю «recur».

Я действительно застрял в этой ситуации, и мне действительно нужны свежие глаза и умы, чтобы помочь мне в этом. Я искренне надеюсь, что я достаточно хорошо разъяснил свою проблему.

+0

вы должны держать время повторятся в объект TimeSpan –

+0

не могли бы вы пояснить, почему Плюс это не решает право выпуска Может быть, его более аккуратным – Mittchel

ответ

0

Я не могу дать вам конкретный ответ, поскольку вам нужно больше контекста (например, сколько элементов есть, есть уже класс, который обрабатывает «Werk» (я голландский ;-)). Является ли коллекция уже отфильтрованы, что ОНТ он ток «debiteur» находится в коллекции ") Но я могу указать вам в правильном направлении

Создать класс работы, как это:..

public class Werk 
{ 
    public bool IsRecurrungThisWeek(DateTime date) 
    { 
     // This can be implemented by yourself 
    } 

    public DateTime StartsFrom { get; set; } 
    public int Recur { get; set; } 
    public int Debiteur { get; set; } 
} 

И делать простой Где:.?

IEnumerable<Werk> list = GetWerkObjects(); 
var aDateOfTheWeek = new DateTime(); 
var werkRecurringThisWeek = list.Where(w => w.IsRecurrungThisWeek(aDateOfTheWeek)); 
+0

Переход от 'Queryable.Where 'to' Enumerable.Whe re 'довольно большая разница ... –

+0

@ ta.speot.is Вы правы. Это решение зависит от контекста. Я предпочитаю это, когда количество записей не очень велико, если Ienumarable может быть кэширован для следующего запроса или если у вас уже есть много логики в существующих классах (например, вычисление для weeknumbers). В другом случае вам может понадобиться другое решение. –

+0

Большое спасибо за вашу помощь. Теоретически количество объектов Werk может быть бесконечным. Думаю, на практике сумма осталась бы ниже 50. @AlexSiepman: Существует класс Werk, но это мой объект EF (ORM). И нет, коллекция не фильтруется. – Mittchel

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

  • Нет связанных вопросов^_^