2016-05-04 125 views
1

我有一個類的MongoDB的Linq的時間差,它包含兩個日期時間變量,「從」和「要」:在WHERE語句

public class A 
{ 
    public DateTime From; 
    public DateTime To; 
} 

如果我想爲所有對象,其中來自兩個和相距只有2個小時,我會寫這樣的事:

_db.GetCollection<A>("A").Find((x.To-x.From).TotalMinutes <= 120).ToList(); 

var Minutes120 = new TimeSpan(2, 0, 0); 
_db.GetCollection<A>("A").Find((x.To-x.From) <= Minutes120).ToList(); 

甚至

var Minutes120 = new TimeSpan(0, 120, 0).Ticks; 
_db.GetCollection<A>("A").Find((x.To.Ticks-x.From.Ticks) <= Minutes120).ToList(); 

但是,以上都沒有工作。我總是得到「...不支持。」錯誤。

有沒有辦法像上面那樣進行搜索,而不必將時差與日期一起保存在單獨的屬性中?儘管我只在一個查詢中需要它,但似乎有點矯枉過正,可以節省時間差異。

回答

2

query reference of mongo db中沒有算術運算符。這意味着使用這種操作符的查詢不能轉換爲MongoDB查詢。

替代添加構件因此,

1)擴展查詢並把你的表達在一個凡ToList(後子句)(內存中的所有差異.NET計算比較)

2)使用MongoDB引擎的aggregation methods這是一種可能的查詢方法:在From和To字段上聚合,或許用$sum或其他東西,用120分鐘的需求在$match的結果上結束。請記住,彙總的輸出是not really a class of yours anymore(因爲您已經引入了新成員)。 Here是一篇關於使用聚合函數進行搜索和計算的優秀文章。