MongoDB Linq在WHERE语句中的日期差异

时间:2016-05-04 11:18:20

标签: c# mongodb linq datetime

我有一个类,它包含两个DateTime变量," From"和" To":

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

如果我想要获取所有物品,其中From和Two相隔仅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();

但是,上述工作都没有。我总是得到&#34; ...不受支持。&#34; 错误。

有没有办法像上面那样进行搜索,而不必将时间差与日期保存在一个单独的属性中?保存时差似乎有点过分,尽管我只需要在一个查询中使用它。

1 个答案:

答案 0 :(得分:2)

query reference of mongo db中没有算术运算符。这意味着使用此类运算符的查询无法转换为MongoDB查询。

因此,添加成员的替代方案是

1)展开查询并将表达式放在ToList()之后的Where子句中(所有差异的内存中.NET计算比较)

2)使用MongoDB引擎的aggregation methods这是一种可能的查询方式:聚合From和To字段,可能使用$sum或其他内容,以$match结尾根据您的120分钟要求获得结果。请记住,聚合的输出是not really a class of yours anymore(因为您已经引入了新成员)。 Here是一篇关于使用聚合函数进行搜索和计算的精彩文章。