转换时间从小时到分钟与Linq
本文关键字:分钟 Linq 小时 时间 转换 | 更新日期: 2023-09-27 18:18:04
我已经做了很多搜索,但不能找到我想要完成的。当使用Linq -实体时,我得到UTC时间和数据库中的a值之间的差异,这是估计什么时候应该离开。我认为从UTC减去我的ETO的减法是正确的,但我需要将其转换为分钟。当前的减法(由于它是DateTime)以小时和分钟显示,但我需要显示为240而不是2小时的差异。
问题是,当我尝试将结果除以60或尝试使用。tostring(@"mm")格式化时,我得到了一个错误。当我尝试乘以1440(24小时内的分钟)时,我得到一个错误,无法转换系统。时间跨度翻倍。如果我尝试不转换为双精度类型,我会得到一个错误,即不能将"*"操作数应用于TimeSpan。试图将它设置为。tostring (@"mm"),它告诉我没有。tostring的重载。
这是我对查询的选择。目前我的MinutesLeft显示为02:32:38.7914913,时间为2小时32分38秒。
select new
{
EstimateOut=f.ESTIMATED_OUT,
UTC=DateTime.UtcNow,
MinutesLeft=(DateTime.UtcNow - f.ESTIMATED_OUT),
//MinutesLeft=(double)(DateTime.Now - f.ESTIMATED_OUT)*1440,
//MinutesLeft=(DateTime.Now - f.ESTIMATED_OUT)*1440,
}).ToList();
您可以使用TotalMinutes属性来获取结果:
MinutesLeft = (DateTime.UtcNow - f.ESTIMATED_OUT).TotalMinutes;
您得到的值是一个可空类型。你可以这样访问它:
MinutesLeft = (DateTime.UtcNow - f.ESTIMATED_OUT).Value.TotalMinutes;
由于可空类型可以为null,因此您应该确保它有value:
TimeSpan? t = (DateTime.UtcNow - f.ESTIMATED_OUT);
var MinutesLeft = t.HasValue? t.Value.TotalMinutes : -1;
在我对这个查询的初始测试中,我使用LinqPad设置为" c# Statements"。现在我实际应用这个在我的MVC项目,我提出了一个错误与AddMinutes部分。错误提示"LINQ to Entities不识别方法System"。DateTime AddMinutes(double)'方法,此方法不能转换为存储表达式'。
我有几个问题。我搜索了这个错误,发现一些帖子说我应该使用这样的System.Data.Entity.DbFunctions。AddMinutes("DATETIMEHERE",180)。然而,当我在LinqPad中添加这个时,我得到"DbFunctions在命名空间中不存在"。当我将其添加到MVC项目中的查询时,我得到了基本相同的消息。到目前为止,我还没有找到任何东西来帮助解决这个问题。我需要从NuGet添加一个引用吗?我已经通过NuGet安装了EntityFramework。
第二个问题,一旦我把所有的引用都正确地做了,下面的陈述是否正确?等= System.Data.Entity.DbFunctions.AddMinutes (f。ESTIMATED_OUT, f.OFFSET_DEP_TIME_MINS + (f.OFFSET_DEP_TIME_MINS/1440))