2017-04-26 205 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)。 –

相關問題