2016-12-12 105 views
0

我有以下的LINQ功能:蒙戈,使用totalmilliseconds在LINQ查詢

TimeSpan lInterval = aEndTime - aBeginTime; 
int lIntervalInt = (int)Math.Round(lInterval.TotalMilliseconds/(30*60*1000)); 

var meh = lCollection.Aggregate() 
      .Match(lValue => lValue.Tag == LTag._id) 
      .Match(lValue => lValue.TimeStamp >= aBeginTime) 
      .Match(lValue => lValue.TimeStamp <= aEndTime) 
      .Group(lValue => new {Period = (lValue.TimeStamp-aBeginTime).TotalMilliseconds/lIntervalInt, TimeStamp = lValue.TimeStamp }, g => 
       new 
       { 
        Key = g.Key, 
        avgValue = g.Average(x => x.Value) 
       }) 
      .Project(r => new cValueDouble() 
      { 
       TimeStamp = r.Key.TimeStamp, 
       Tag = LTag._id, 
       Value = r.avgValue 
      }); 

我收集如下所示:

ObjectId _id; 
DateTime TimeStamp; 
ObjectId Tag; 
double Value; 

我所試圖做的是聚集通過具體的值用戶定義的時間間隔。例如,這些值每兩分鐘記錄一次,但我想在30分鐘內平均檢索數據。 但問題看起來像mongo驅動程序不支持timespan.TotalMilliseconds命令。我在嘗試運行代碼時出現以下錯誤:

「System.NotSupportedException」類型的未處理的異常出現在MongoDB.Driver.dll

附加信息:會員類型System.TimeSpan的TotalMilliseconds在表達式樹({document} {TimeStamp} - 1/1/2010 12:00:00 AM).TotalMilliseconds不能被翻譯。

是否有另一個命令,我可以嘗試做到這一點?或者也許是完全不同的方法。我寧願在mongo中進行聚合,而不是在本地進行聚合。

編輯 有沒有人可以將mongo文檔時間戳轉換爲某種時間格式。我只需要持續引用一段時間。

回答

0

我認爲這是因爲它是Mongo不理解的TimeSpan類型對象。在你的查詢中使用之前,嘗試將其轉換爲雙精度值,並且它應該可以工作...

作爲一個提示:爲什麼變量前綴爲'l'或'a'?我有時看到這一點,並不明白推理

+0

如何在手之前將其轉換爲雙倍?我需要計算特定文檔的時間戳記是什麼。一個演員會在那裏工作兩倍? – blackwolfsa

+0

在旁註中,前綴表示變量來自哪裏,l =局部聲明,a =參數。它是一種編碼標準,它使編碼和閱讀代碼變得更容易。 – blackwolfsa