2017-04-26 329 views
1

我正在用Entity Framework学习ASP.NET和MVC,这就是为什么这个问题对你们中的一些人来说似乎微不足道。计算MVC中两个日期时间之间的差异5

我的目标是相对简单: 我有这样一个模型(Hour.cs):

public class Hour 
{ 
    public int ID { get; set; } 
    public int UsrID { get; set; } 
    [DataType(DataType.Time)] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:HH:mm}")] 
    public DateTime StartDateTime { get; set; } 
    [DataType(DataType.Time)] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:HH:mm}")] 
    public DateTime EndDatetime { get; set; } 
    public int? ProjectID { get; set; } 
    public virtual Project Project { get; set; } 
    public virtual Usr Usr { get; set; } 
} 

我现在有一个观点,即显示了在表/列表的信息: StartDateTimeEndDateTimeUsrIDProjectID

我想为TotalHrs添加一列,表示为StartDateTimeEndDateTime之间的差值。

为了让我看了许多文章告诉我在的地方行使用的时间跨度的区别:

Timspan diff = StartDateTime - EndDateTime; 

我不明白的是在哪里插入该代码。我假设它在控制器中,但我不知道如何。 我的索引方法看起来像这样:

public ActionResult Index() 
    { 
     var hours = db.Hours 
      .Include(c => c.Usr) 
      .Include(p => p.Project); 

        return View(hours.ToList()); 
    } 

任何指针赞赏!

+0

你打算怎么区别? – Jasen

回答

0

我反对将这样的计算存储在数据库中,因为您可以在客户端轻松完成此操作,因为您拥有所有必需的信息。

添加一个新的属性,并指定只是一个GET accesor:

public class Hour 
{ 
    // ... 
    [NotMapped] 
    public TimeSpan TotalHrs 
    { 
     get 
     { 
      return this.StartDateTime - this.EndDatetime; 
     } 
    } 
    // ... 
} 

然后,你可以访问它就像在你看来,控制器的任何其他财产或消耗它的任何类。

TimeSpan val = hour.TotalHrs; 
+0

只需注意'TotalHrs'不能在EF/Linq-2-Sql查询中使用。 LINQ语句必须是Linq-2-Objects(它需要在Enumerable上运行,而不是Queryable)。 –

相关问题