2015-10-15 117 views
0

我已经做了很多搜索,不能完全找到我想要完成的事情。当使用Linq - 实体时,我得到了UTC时间与数据库中某个值应该离开的估计值之间的差异。我认为从UTC减去的ETO的减法运行正常,但是我需要将其转换为分钟。当前的减法(由于它是一个日期时间)正在以小时和分钟显示,但我需要显示为240而不是两点两小时的差异。Linq转换时间从几小时到几分钟?

问题是,当我尝试将结果除以60或尝试使用.ToString(@“mm”)格式化时出现错误。当我尝试在1440(24小时内分钟)时出现错误时,出现错误,无法将system.TimeSpan转换为Double。如果我尝试不转换为double,则会出现“*”的操作数无法应用于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(); 

回答

3

您可以使用属性TotalMinutes,让您的结果:

MinutesLeft = (DateTime.UtcNow - f.ESTIMATED_OUT).TotalMinutes; 

你得到的值是一个nullable type。您可以访问这种方式:

MinutesLeft = (DateTime.UtcNow - f.ESTIMATED_OUT).Value.TotalMinutes; 

由于可空类型可以为空,你应该确保它确实有值:

TimeSpan? t = (DateTime.UtcNow - f.ESTIMATED_OUT); 
var MinutesLeft = t.HasValue? t.Value.TotalMinutes : -1; 
+0

我给我一个错误说'TimeSpan?'不包含'TotalMinutes'的定义。当我在TotalMinutes上进行快速搜索时,它看起来像大多数人都在使用Lamda,但我使用的查询类似于(从Table中的f),然后执行select new并指定我的属性。 – Caverman

+0

为您编辑 –

+0

谢谢!有点圆润,它完美的作品。当试图检查像你显示的空值可能是因为它在选择分配给对象时出现错误。我会更多地研究一下,看看我能否实现它。 – Caverman

0

在我这个查询的初始测试我使用LinqPad集到“C#语句”。现在我实际上在我的MVC项目中应用了这个,并且我在AddMinutes部分发现了一个错误。错误说“LINQ to Entities无法识别方法'System.DateTime AddMinutes(double)'方法,并且此方法无法转换为商店表达式'

所以我有几个问题。错误,并发现一些帖子说我应该使用类似System.Data.Entity.DbFunctions.AddMinutes(“DATETIMEHERE”,180)。但是,当我在LinqPad中添加这个时,我得到“DbFunctions不存在于命名空间中”。当我将它添加到MVC项目中的查询中时,我得到的消息基本相同。到目前为止,我还没有找到任何有助于解决该消息的方法。是否需要添加对NuGet的引用?我已经安装了EntityFramework通过NuGet

第二个问题,一旦我g等所有参考做得正确吗? ETD = System.Data.Entity.DbFunctions.AddMinutes(f.ESTIMATED_OUT,f.OFFSET_DEP_TIME_MINS +(f.OFFSET_DEP_TIME_MINS/1440))

相关问题