EF VAT表计算特定日期的增值税率

时间:2011-08-04 10:17:17

标签: c# asp.net-mvc asp.net-mvc-3 entity-framework


我正在使用Entity Framework在C#中开发MVC3应用程序。我有一个增值税率表,其中包含增值税率,开始日期,结束日期字段。 开始日期和结束日期可以为空,表示这是历史汇率或持续汇率。我想弄清楚的是,当我传递一个日期时,如何创建一个将这些空值考虑在内的单个查询给我增值税率。 (例子显示英国日期格式dd / mm / yyyy

+--------------+-------------+----------+
| Start Date   | End Date    | Vat rate |
+--------------+-------------+----------+
| Null         | 01/01/2011  | 19       |
+--------------+-------------+----------+
| 02/01/2011   | 08/08/2011  | 20       |
+--------------+-------------+----------+
| 09/08/2011   | Null        | 21       |
+--------------+-------------+----------+

感谢您的时间

2 个答案:

答案 0 :(得分:0)

假设您传入@Date

SELECT      VATRate 
FROM        VATRateTable
WHERE       @Date
BETWEEN     ISNULL(StartDate, '1900-01-01') AND ISNULL(EndDate, '2100-01-01') 

答案 1 :(得分:0)

如果您使用EF,可以执行以下操作:

DateTime first = DateTime.Parse("01-01-1900");
DateTime last = DateTime.Parse("01-01-2100");
var rate = db.VatRates.Where(
    vr => input > (vr.StartDate ?? first) && input < (vr.EndDate ?? last)).First().Rate;

根据下面的评论,如果没有EndDate列,请尝试:

DateTime start = DateTime.Parse("01-01-1900");
var rate = db.VatRates.Where(vr => input > (vr.StartDate ?? start))
    .OrderByDescending(vr => vr.StartDate).First().Rate;

适合我:)