Linq将时间从几小时转换为几分钟?

时间:2015-10-15 19:27:40

标签: c# linq linq-to-entities

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

问题在于,当我尝试将结果除以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();

2 个答案:

答案 0 :(得分:3)

您可以使用属性TotalMinutes来获取结果:

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

您获得的价值是nullable type。你可以这样访问它:

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

由于可空类型可以为null,因此应确保它具有值:

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

答案 1 :(得分:0)

在我对此查询的初步测试期间,我使用LinqPad设置为" C#语句"。现在我实际在我的MVC项目中应用它,并且我在AddMinutes部分出现错误。错误说" LINQ to Entities无法识别方法' System.DateTime AddMinutes(double)'方法,此方法无法转换为商店表达式'。

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

第二个问题,一旦我正确完成所有引用,以下陈述是否正确? ETD = System.Data.Entity.DbFunctions.AddMinutes(f.ESTIMATED_OUT,f.OFFSET_DEP_TIME_MINS +(f.OFFSET_DEP_TIME_MINS / 1440))