首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个月过去了吗?

一个月过去了吗?
EN

Stack Overflow用户
提问于 2009-05-23 18:02:22
回答 5查看 165关注 0票数 4

在我的数据库中,我有一个表,其中包含一些订阅信息。我有一个StartDate和一个EndDate作为DateTime。

我需要做的是做一个Linq查询,获取所有应付款的行。付款应该在每个月他们注册(StartDate)的同一天进行,并在EndDate上停止。所以如果他们在23号登记。五月,我需要再开一次发票。六月二十三号七月,等等。

代码语言:javascript
复制
var query = from c in db.Subscription
            where c.StartDate.Value.Day == DateTime.Now.Day
            // What if today is Feb. 28 and a customer registered January 31.
            // What if....

我是lost...please help!

最佳,乔恩2H

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-05-23 18:15:39

你为什么不为所有到期的付款创建一个单独的表。

当获得一个新的订阅时,您将计算该订阅的所有未来付款日期,并使用SubscriptionID、PaymentDate和Amount向DuePayments表中添加多个行。

行数等于订阅开始日期和结束日期之间的月数,使用DateTime.AddMonths(1)可以很容易地计算出小于结束日期的付款日期。

票数 2
EN

Stack Overflow用户

发布于 2009-05-23 18:19:04

处理月份转存天数的一种方法是(假设您希望在每月的最后一天对其进行计费,在奇数情况下):

代码语言:javascript
复制
var Tomorrow = DateTime.Today.AddDays(1);

var query = from c in db.Subscription
            where c.EndDate.Value > DateTime.Today &&
                  (c.StartDate.Value.Day == DateTime.Today.Day ||
                   (Tomorrow.Month > DateTime.Today.Month && 
                    c.StartDate.Value.Day > DateTime.Today.Day))
            select c;

不过,您可能希望为到期付款创建一个新表,并预先计算日期。这样你就可以跟踪付款的时间,并使生活在未来变得更容易。

票数 3
EN

Stack Overflow用户

发布于 2009-05-23 18:12:40

代码语言:javascript
复制
select
    *
from
   Subscription s
where
   getdate() > dateadd(month, 1, isnull(s.lastBilledDate, s.StartDate) )

像这样的东西应该是可行的。希望您在数据库中的某个位置有一个字段,可以显示最后的账单日期--它比订阅开始日期更适合使用。

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

https://stackoverflow.com/questions/902074

复制
相关文章

相似问题

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