首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET应用程序的星期/一天中的时间限制

.NET应用程序的星期/一天中的时间限制
EN

Stack Overflow用户
提问于 2009-09-02 14:12:09
回答 3查看 489关注 0票数 1

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-02 14:26:09

我做过类似的事情。

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

SalePriceId指南,主键

ItemId指南,FK

StartTime时间跨度

EndTime时间跨度

DaysOfWeek DaysOfWeek(标志枚举)

折扣加倍

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

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

因此,要查找周二生效的商品的任何销售信息,您可以执行以下操作

代码语言:javascript
复制
select * 
from SalePrice
where ItemId = @itemGuid
and StartTime <= @time 
and EndTime >= @time
and DaysOfWeek & @DOW = @DOW

这是基本模式。不要期望这会复制-粘贴工作(我不确定我的按位查询内容),但我正在成功地使用此模式来跟踪当前价格。

票数 0
EN

Stack Overflow用户

发布于 2009-09-02 14:24:01

我会简单地编写一个"GetDiscount“方法来实现您所描述的逻辑。您可以使用DateTime对象来确定当前日期和时间。

从你的描述中,不清楚为什么这种简单的解决方案对你不起作用。你到底在期待什么?

票数 1
EN

Stack Overflow用户

发布于 2009-09-02 14:38:30

假设您将折扣应用于完整订单,而不是单个项目,我将只创建以下两个类。

代码语言:javascript
复制
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之间的一对多关系。您可以尝试使用触发器或检查约束,但我建议仅在应用程序中实施此逻辑,因为在数据库级别实施此逻辑不会获得太多好处。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1367954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档