我正在使用Entity Framework学习ASP.NET和MVC,这就是为什么这个问题对你们中的一些人来说似乎微不足道。
我的目标相对简单: 我有一个这样的模型(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; }
}
我目前有一个显示表/列表中信息的视图:
StartDateTime
,EndDateTime
,UsrID
,ProjectID
我想为由StartDateTime
和EndDateTime
之间的差异代表的TotalHrs添加一列。
为了得到差异,我已经阅读了许多文章,告诉我在某些地方使用时间跨度:
Timspan diff = StartDateTime - EndDateTime;
我不明白的是插入此代码的位置。我假设它在控制器中,但我不明白如何。 我的索引方法如下所示:
public ActionResult Index()
{
var hours = db.Hours
.Include(c => c.Usr)
.Include(p => p.Project);
return View(hours.ToList());
}
任何指示赞赏!
答案 0 :(得分:0)
我会反对将这样的计算存储在数据库中,当您可以在客户端轻松地执行此操作时,因为您拥有所有必要的信息。
添加新属性并仅指定get accesor:
public class Hour
{
// ...
[NotMapped]
public TimeSpan TotalHrs
{
get
{
return this.StartDateTime - this.EndDatetime;
}
}
// ...
}
然后你可以像访问视图,控制器或任何消耗它的类中的任何其他属性一样访问它。
TimeSpan val = hour.TotalHrs;