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

C# EF VAT表计算特定日期的增值税税率,c#,asp.net-mvc,asp.net-mvc-3,entity-framework,C#,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,我正在使用实体框架在C#中开发一个MVC3应用程序。我有一个增值税税率表,其中包含增值税税率、开始日期、结束日期字段。 “开始日期”和“结束日期”可以为空,以指示这是历史汇率还是持续汇率。我想弄明白的是,当我传入一个日期时,如何创建一个将这些空值考虑在内的查询,以给出增值税税率。 (注意:示例显示的是英国日期格式dd/mm/yyyy +--------------+-------------+----------+ | Start Date | End Date | Vat rate


我正在使用实体框架在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 | +--------------+-------------+----------+ +--------------+-------------+----------+ |开始日期|结束日期|增值税税率| +--------------+-------------+----------+ |空| 01/01/2011 | 19| +--------------+-------------+----------+ | 02/01/2011 | 08/08/2011 | 20 | +--------------+-------------+----------+ |2011年8月9日|空| 21| +--------------+-------------+----------+
感谢您抽出时间

假设您通过@Date

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

如果您正在使用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;

对我有效:)

这会很混乱,如果我尝试的话,我可能会弄错。。。但是,为什么不直接设置StartDate=最小SQL日期值,EndDate=最大SQL日期值,并完全避免邪恶的空值呢?你也可以有一个开始日期,你不需要一个结束日期,然后你的数据永远不会不一致-它可能是错误的-但不是不一致。除非我想如果你有两个相同的开始日期,但这很容易避免。是的,我使用了EF,我以为我有,但我仍然无法得到我需要的结果。我删除了“结束日期”列,因此表的外观与以前一样,但没有此列。
DateTime start = DateTime.Parse("01-01-1900");
var rate = db.VatRates.Where(vr => input > (vr.StartDate ?? start))
    .OrderByDescending(vr => vr.StartDate).First().Rate;