2015-10-13 92 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」)