我在表中有一列Datetime值。我在Controller中使用LINQ查询创建模型对象,在该模型中尝试执行计算以返回从日期值到现在为止的天数。结果将根据结果的值更新另一个字符串变量。
这是LINQ查询
public ActionResult Index()
{
var result = from a in db.area
join c in db.sample
on a.location_id equals c.location_id into samples
let sample = samples.OrderByDescending(c => c.date_sampled).FirstOrDefault()
select new StatusModel
{
location_name = a.location_name,
latitude = a.latitude,
longitude = a.longitude,
status = sample.sample_status,
sampDate = sample.sample_date ?? DateTime.Now
};
return View(result);
}
这是我的StatusModel用来执行计算的方法和构造函数。
public int difference;
public StatusModel()
{
setStatus();
}
public void setStatus()
{
DateTime oldDate = sampDate;
DateTime newDate = DateTime.Now;
TimeSpan ts = newDate - oldDate;
difference = ts.Days;
}
当我手动输入日期时(例如,如果我设置了),则setStatus方法可以正常工作
DateTime oldDate = new DateTime(2016,2,9);
它按预期返回。但是,使用sampDate变量,它将返回“ 736047”作为所有内容的天数!我数据库中的日期设置为“ 2016-01-04”,当我运行我的项目时,视图中的所有日期都转换为MM-DD-YYYY,也许这就是问题所在。
该表示法:
var x = new StatusModel {
location_name = a.location_name,
latitude = a.latitude,
longitude = a.longitude,
status = sample.sample_status,
sampDate = sample.sample_date ?? DateTime.Now
}
确切地意味着:
var x = new StatusModel();
x.location_name = a.location_name;
x.latitude = a.latitude;
x.longitude = a.longitude;
x.status = sample.sample_status;
x.sampDate = = sample.sample_date ?? DateTime.Now;
首先,此代码将运行的构造函数StatusModel
,然后将插入属性的值。在您的情况下重要的是:
public StatusModel()
{
setStatus();
}
您正在setStatus()
构造函数中运行方法,该方法正在为设置值difference
。
但是,此方法正在使用sampDate
尚未“初始化”的方法-因此sampDate
将有一个默认值DateTime
,即0001-01-01
。因此,现在您有一个原因,为什么要difference
返回736047天,因为您要减去2016-0001(大约)。
现在是时候解决主要问题了-如何返回这两个日期的差额。这将非常容易。
public int difference {
get { return (sampDate - DateTime.Now).Days; }
}
public StatusModel()
{
}
现在,您已经掌握了difference
该领域的逻辑,在我看来,在这种情况下,这更“自然”。difference
每次您“询问”该属性的值时,以及在将模型传递给视图期间(使用return View(model);
),都会返回正确的值
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句