gpt4 book ai didi

c# - 计算使用 LINQ 函数实例化的 C# 对象中的天数

转载 作者:太空宇宙 更新时间:2023-11-03 23:18:43 26 4
gpt4 key购买 nike

我在表中有一列日期时间值。我在 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”,当我运行我的项目时, View 中的所有日期都转换为 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()
{

}

现在你在这个字段的 getter 中有了一个逻辑来处理 difference,在我看来,这在这种情况下更“自然”。每次您“询问”此属性的值时,它都会为 difference 返回正确的值,在将模型传递给 View 时也是如此(使用 return View(model);)

关于c# - 计算使用 LINQ 函数实例化的 C# 对象中的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36229597/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com