每x周重复一次

时间:2013-08-10 15:48:23

标签: c# .net entity-framework recurring

我面临着相当复杂的情况,所以我很难为这个问题定义一个正确的标题。我会进一步详细解释,对我来说很光鲜!

我正在开发一个使用ORM(EntityFramework)的WPF应用程序。该应用程序允许用户计划某些任务。这些任务可能每x周重复一次。例如:每两周维护一次Google.com(从星期一开始)。

我存储的方式如下。我有一个Task对象,其中包含一个名为'StartDate'的字段,该字段是首次启动任务的日期。我还创建了一个名为'Recur'的字段(我知道名字可能更好)。 “重复”字段包含特定任务应重复的周数。因此,在上面的示例中,它保留了数字2,因为Google.com上的维护必须每两周完成一次。

现在出现了我面临的情况;我希望用户能够检索特定周数的所有任务。例如:在2013年第42周检索所有任务。如果我创建的任务每周都会重复,这意味着当我想要检索第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();

基本上我试图做的是检查'recur'周的数量是否等于或大于startdate和今天之间的不同日期。我还检查了它与startdate的不同周数,以及今天是'recur'字段所不能解决的。

我真的坚持这种情况,我真的需要一些新鲜的眼睛和头脑来帮助我解决这个问题。我真诚地希望我能够很好地澄清我的问题。

1 个答案:

答案 0 :(得分:0)

我不能给你一个具体的答案因为woukd需要更多的上下文(比如有多少项目,是否已经有一个类来处理“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; }
}

做一个简单的Where:

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