2015-10-15 118 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))

相關問題