Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将日期范围应用于策略_C#_Entity Framework - Fatal编程技术网

C# 如何将日期范围应用于策略

C# 如何将日期范围应用于策略,c#,entity-framework,C#,Entity Framework,我正在进行此项目,以考虑到该表将具有以下内容 保单表ID开始日期结束日期账龄金额 如果最年轻的驾驶员在开始日期年龄在21到25岁之间 保险单的保险费增加20% 如果最年轻的驾驶员在保单生效日期年龄在26至75岁之间,则将保费降低10% 我相信我已经管理了最年轻的司机和年龄范围,但我不知道如何在政策开始日期实现创意 客户保单的默认值为500英镑 public void UpdatePolicyAgePremium(int policyid) { Decimal defaultAmo

我正在进行此项目,以考虑到该表将具有以下内容

保单表ID开始日期结束日期账龄金额

如果最年轻的驾驶员在开始日期年龄在21到25岁之间 保险单的保险费增加20%

如果最年轻的驾驶员在保单生效日期年龄在26至75岁之间,则将保费降低10%

我相信我已经管理了最年轻的司机和年龄范围,但我不知道如何在政策开始日期实现创意

客户保单的默认值为500英镑

public void UpdatePolicyAgePremium(int policyid)
    {
    Decimal defaultAmount = Convert.ToDecimal(500);
    var drivergroups = appliedDB.tblDrivers
      .Where(b => b.policy_Id == policyid && b.age > 21 && b.age < 75)
      .GroupBy(drv => drv.age <= 25).ToList(); // or < 25 ?

    var policy = appliedDB.tblPolicies
                          .Single(p => p.id == policyid);

    foreach (var driverGroup in drivergroups)
    {
        var young = driverGroup.Key;
        decimal multiplier = young ? 1.2m : 1.1m;
        foreach (var driver in driverGroup.OrderBy(d => d.age))
        {
            policy.amount = defaultAmount * multiplier;
            multiplier = 1m; // so only the first iteration is multiplied.
        }
    }
public void UpdatePolicyAgePremium(int-policyid)
{
十进制默认金额=转换为十进制(500);
var drivergroups=appliedDB.tblDrivers
其中(b=>b.policy_Id==policyid&b.age>21&b.age<75)
.GroupBy(drv=>drv.age p.id==policyid);
foreach(driverGroup中的var driverGroup)
{
var young=driverGroup.Key;
十进制乘数=1.2米:1.1米;
foreach(driverGroup.OrderBy中的var驱动程序(d=>d.age))
{
policy.amount=默认金额*乘数;
乘法器=1m;//因此只乘以第一次迭代。
}
}

}

存储birtdate,只需计算开始日期的年龄,然后应用年龄规则。你可以这样计算年龄

  //assuming start date is now, but //depends on your implementation
    DateTime startDate = DateTime.Now   ;

    var age = today.Year - birthdate.Year;

然后您有了应用规则的年龄

而不是年龄,存储生日(计算年龄),您可以将其与开始日期进行比较。大约startdate的年龄是startdate-Birthdate我该如何比较它@Danhunex你不需要比较。您在开始日期计算年龄。年龄=起始日期-出生日期,然后应用21到26或26到74的规则。计算时会考虑开始日期的外观,但仍然不清楚您想要什么。你为什么不按照我先前的建议来展示样本数据和结果呢?对不起,丹,我应该让本对年龄有更多的认识,就像我检查不同年龄组的方法一样,这不是我最初的问题,我该如何与保单的开始日期进行比较