从DateTime.Now中计算db.DaysPastDue - 在Controller中计算db.Loan.DueDate

时间:2018-02-04 19:22:54

标签: c# sql-server asp.net-mvc

我需要计算我的应用程序中(?:.+(?:\/|%2F))+?([^\/]+\.jpg)(?=\?) daysPastDue将由DateTime.Now - Loan.DueDate计算。

一个例子是: Loan.DueDate = 2/1/18 12:00:00 DateTime.Now = 2/4/18 2:17:00 DaysPastDue =应为'3'

我可以通过以下方式从我的观点中做到这一点:

查看

@if (DateTime.Now > item.Loan.DueDate)
{    
     item.Loan.DaysPastDue = (DateTime.Now - item.Loan.DueDate).Value.Days;
}

但问题是它从不在我的数据库中保存它只是在视图上计算。

所以我想在显示视图之前计算Loan.DaysPastDue值并执行db.SaveChanges()

我如何做到这一点?

修改 这是我的更新/插入方法:

    // GET: Kits
            [Authorize(Roles = "Admin, User")]
            public ActionResult Index()
            {
                var kits = db.Kits.Include(k => k.Loan).Include(k => k.Products); 

//Right here is where I wanted to do something like:
// if (DateTime.Now > db.Loan.DueDate)
//{
//      var daysPastDue = (DateTime.Now - item.Loan.DueDate).Value.Days;
//      Loan.DaysPastDue = daysPastDue;
//      db.SaveChanges(Loan.DaysPastDue) //This is the part I think I'm stuck on            
   return View(kits.ToList());
        }

1 个答案:

答案 0 :(得分:4)

您通常不想在数据库中保存计算值。在您的样本中,它已经过去了3天。明天是4天。该视图将显示4天,因为它正在计算它,但如果某人没有提取该视图,数据库值将如何更新?

如果你仍想在显示视图时重新计算并保存该值,那么这样的事情应该有效:

foreach(var kit in kits.Where(k => DateTime.Now > k.Loan.DueDate)
{
    kit.Loan.DaysPastDue = (DateTime.Now - kit.Loan.DueDate).Value.Days;
    db.SaveChanges(kit);
}