选择具有varios日期/时间标准和周期性的记录(LINQ)

时间:2012-02-24 02:34:15

标签: c# linq

我班上有几个字段:RecurrenceStart, RecurrenceEnd, Periodicity, RecurrenceType, WeekDays, DayNumber, WeekOfMonth。 例如,使用以下值在DB中记录:

Name = Event1
DateTimeStart = 2012-02-23 22:00:00.000 
DateTimeEnd = 2012-12-31 23:30:00.000
Periodicity = 2 
RecurrenceType = 1
WeekDays =  62
DayNumber = 1
WeekOfMonth = 1

这意味着Event1将在周一,周二,周三,周四和周五的22:00至23:30和2月23日至12月31日每2周进行一次。

另一个例子:

Name = Event1
DateTimeStart = 2012-02-23 22:00:00.000 
DateTimeEnd = 2012-12-31 23:30:00.000
Periodicity = 2 
ReccurenceType = 2
WeekDays =  16
DayNumber = 25
WeekOfMonth = 0

这意味着Event1将从22:00到23:30以及2月23日到12月31日每2个月25天。 这是枚举:

    [Flags, Serializable,]
    public enum WeekDays {
        Sunday = 1,
        Monday = 2,
        Tuesday = 4,
        Wednesday = 8,
        Thursday = 16,
        Friday = 32,
        Saturday = 64,
        WeekendDays = Sunday | Saturday,
        WorkDays = Monday | Tuesday | Wednesday | Thursday | Friday,
        EveryDay = WeekendDays | WorkDays
    }

    public enum WeekOfMonth {
        None = 0,
        First = 1,
        Second = 2,
        Third = 3,
        Fourth = 4,
        Last = 5
    }

    public enum RecurrenceType {
        Daily = 0,
        Weekly = 1,
        Monthly = 2,
        Yearly = 3,
        Minutely = 4,
        Hourly = 5,
    }

这是我的疑问:

Database.BaseEvents.Where(e =>
                          e.RecurrenceStart.Value.Date <= today &&
                          e.RecurrenceEnd.Value.Date >= today
                          ).ToList();

此查询仅检查事件的开始和结束日期。如何构建将检查所有其他字段的查询或使用帮助方法检查另一个字段(但我需要性能)。

你能帮我完成这项任务吗?

PS。对于第一个示例,我的查询将在2012-02-23至2012-12-31之间每天返回Event1。但是Event1应该只返回2012-02-23 - 2012-03-26。然后跳过一个星期。因此,此事件将返回的下一个日期:从2012-03-05到2012-11-05。然后再跳过一周....依此类推。

谢谢,对不起我的英语。

0 个答案:

没有答案