在我的数据库中,我有一个表,其中包含一些订阅信息。我有一个StartDate和一个EndDate作为DateTime。
我需要做的是做一个Linq查询,获取所有应付款的行。付款应该在每个月他们注册(StartDate)的同一天进行,并在EndDate上停止。所以如果他们在23号登记。五月,我需要再开一次发票。六月二十三号七月,等等。
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
发布于 2009-05-23 18:15:39
你为什么不为所有到期的付款创建一个单独的表。
当获得一个新的订阅时,您将计算该订阅的所有未来付款日期,并使用SubscriptionID、PaymentDate和Amount向DuePayments表中添加多个行。
行数等于订阅开始日期和结束日期之间的月数,使用DateTime.AddMonths(1)可以很容易地计算出小于结束日期的付款日期。
发布于 2009-05-23 18:19:04
处理月份转存天数的一种方法是(假设您希望在每月的最后一天对其进行计费,在奇数情况下):
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;不过,您可能希望为到期付款创建一个新表,并预先计算日期。这样你就可以跟踪付款的时间,并使生活在未来变得更容易。
发布于 2009-05-23 18:12:40
select
*
from
Subscription s
where
getdate() > dateadd(month, 1, isnull(s.lastBilledDate, s.StartDate) )像这样的东西应该是可行的。希望您在数据库中的某个位置有一个字段,可以显示最后的账单日期--它比订阅开始日期更适合使用。
https://stackoverflow.com/questions/902074
复制相似问题