星期几/ .NET应用程序的时间限制

时间:2009-09-02 14:12:09

标签: c# .net-3.5

对于在.NET应用程序的域/数据库中为以下场景建模的好方法,任何人都有任何想法吗?假设我有一些可以应用于销售交易的折扣,但折扣应仅适用于特定时间的某一天的特定日期。因此,例如,如果在周一上午9点​​到中午之间发生销售,则应该应用折扣,但如果在这些时间之间的周二发生销售,则不应用折扣。我希望能够在同一天内处理多个时间段(即 - 周三上午9点 - 中午和下午6点 - 午夜。

3 个答案:

答案 0 :(得分:1)

我只想写一个“GetDiscount”方法来实现你所描述的逻辑。您可以使用DateTime对象来确定当前日期和时间。

从您的描述中不清楚为什么这样简单的解决方案对您不起作用。你到底想要什么?

答案 1 :(得分:0)

我做过类似的事情。

您的SalePrice表看起来像(该死的降价表):

SalePriceId Guid,PK
ItemId Guid,FK
StartTime Timespan
结束时间 Timespan
DaysOfWeek DaysOfWeek(flag enum)
折扣加倍

(这是来自代码视图; Timespan是一个在Sql 2008中映射的.NET类)

DaysOfWeek是一个包含Sun-Sat的标志枚举。

因此,要查找星期二生效的项目的任何销售,您可以执行类似

的操作
select * 
from SalePrice
where ItemId = @itemGuid
and StartTime <= @time 
and EndTime >= @time
and DaysOfWeek & @DOW = @DOW

这是基本模式。不要指望这是复制粘贴工作(我不确定我的按位查询的东西),但我成功地使用这种模式来跟踪当前的价格。

答案 2 :(得分:0)

我假设你将折扣应用于一个comlete订单而不是单个商品,我会创建以下两个类。

class Order
{
    Guid Id;
    DateTime TimeStamp;
    Discount Discount;
}

class Discount
{
    Guid Id;
    DayOfWeek Day;
    TimeSpan StartTime;
    TimeSpan EndTime;
    Decimal Amount;
}

然后,您可以使用Order.TimeStamp.DayOfWeekOrder.TimeStamp.TimeOfDay并搜索折扣列表,直到找到对已处理订单有效的Discount并在Order上存储参考宾语。将此映射到数据库应该非常简单 - DayofWeek可以存储为整数,DateTimeTimeSpan也可以使用。

棘手的部分是约束OrderDiscount之间的一对多关系。可以尝试使用触发器或检查约束,但我建议仅在应用程序中强制执行此逻辑,因为通过在数据库级别强制执行它不会获得那么多。