2015-10-13 84 views
0

我仍然在学习Linq,并且遇到了一个我无法工作的查询。我收到一个关于DateTime?的错误,其中不包含AddMinutes的定义。 Estimated_Out字段是可空的DateTime类型。 Offset_Dept_Time_Mins是一个整数字段类型。在Linq中添加分钟到日期时间?

这是SQL。它需要一个字段(Estimated_Out),并在24小时内添加一个可接受的偏移时间(Offset_Dep_Time_Mins)除以分钟数,并使用24小时格式将其格式化为分钟和秒。返回时间的一个例子是(17:45)。

select to_char(ESTIMATED_OUT + (OFFSET_DEP_TIME_MINS/1440),'HH24:MI') as ETD 
FROM TableName 

这是我在Linq尝试的。在这个例子中,我首先试着让它增加10分钟。一旦我有了,我将尝试添加按当天分钟数除的偏移量。

var result = (from f in TableName 
       select new 
       { 
        ETD=f.ESTIMATED_OUT, 
        ETD2=f.ESTIMATED_OUT.AddMinutes(10) 
       }).ToList(); 

如何在预计时间内添加分钟数然后如何格式化?我假设一旦时间正确,我将不得不将其转换为Sting。

回答

0

您需要将可为空的时间值转换为DateTime,然后才能添加分钟吧:

所有的
var result = (from f in TableName 
      select new 
      { 
       ETD=f.ESTIMATED_OUT, 
       ETD2=((DateTime)f.ESTIMATED_OUT).AddMinutes(10) 
      }).ToList(); 
+0

如果'ESTIMATED_OUT'是'空会发生什么'? –

+0

你会得到一个无效的操作异常。 – kskyriacou

0

不能调用.AddMinutes()DateTime?因为它不是DateTime。要做到这一点,你首先必须得到内部价值(f.ESTIMATED_OUT.Value)或一些默认值,而不是(使用GetValueOrDefault(x))。

如果你选择获得不违约的内在价值,请务必先过滤掉空行:

from f in TableName 
where f.ESTIMATED_OUT.HasValue 
select new 
{ 
    ETD=f.ESTIMATED_OUT, 
    ETD2=f.ESTIMATED_OUT.Value.AddMinutes(10) 
}).ToList(); 

如果你想使用一些默认值,而不是使用这样的:

from f in TableName 
select new 
{ 
    ETD=f.ESTIMATED_OUT, 
    ETD2=f.ESTIMATED_OUT.GetValueOrDefault(DateTime.Now).AddMinutes(10) 
}).ToList(); 
+0

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

+0

我搜索了这个错误,发现有些帖子说我应该使用像这个系统。Data.Entity.DbFunctions.AddMinutes(“DATETIMEHERE”,180)。然而,当我在LinqPad和MVC中添加这个时,我会得到“DbFunctions不存在于命名空间中”。我是否需要添加对NuGet的引用?我已经通过NuGet安装了EntityFramework。 第二个问题,一旦我正确地完成了所有的引用,以下语句是否正确? ETD = System.Data.Entity.DbFunctions.AddMinutes(f.ESTIMATED_OUT,f.OFFSET_DEP_TIME_MINS +(f.OFFSET_DEP_TIME_MINS/1440)) – Caverman

0

感谢您的意见。我想根据每个人的建议来分享看起来像什么样的工作。

ETD = f.ESTIMATED_OUT.GetValueOrDefault(DateTime.Now).AddMinutes((双)f.OFFSET_DEP_TIME_MINS/1440)的ToString(@ “HH:MM”)