使用linq和mongodb在用户指定的日期之间选择文档

时间:2015-03-26 23:47:06

标签: c# linq mongodb datetime mongodb-.net-driver

我是MongoDB的新手,我遇到了查询问题。查询尝试查找2个DateTime值之间的所有文档。我以前能够使用所需的结果运行类似的查询,但是使用不同的数据库模式。通过对我当前的数据库模式应用相同的查询,查询不起作用。 查询如下:

            var query =
            (
                from t in rdb.TimeStampsCollection.AsQueryable()
                where t.dt > lowDate && t.dt < highDate
                select t.rbt_List 
            );

rdb.TimeStampsCollection映射到名为TimeStamp的C#类。除了BSonObjectId之外,该类包含一个DateTime和一个名为RobotTimeStamps的类的对象列表。

public class TimeStamp
{
    public BsonObjectId Id;
    public DateTime dt;
    public List<RobotTimeStamp> rbt_List;

    public TimeStamp(DateTime date)
    {
        this.dt = date;
        this.rbt_List = new List<RobotTimeStamp>();
    }
}


public class RobotTimeStamp
{
    public BsonObjectId Id;
    public int robotID;
    public int productionCellId;
    public DateTime timeStamp;
    public double p1;
    public double p2;
    public double p3;
    public double q1;
    public double q2;
    public double q3;
    public double s1;
    public double s2;
    public double s3;
    public double pf1;
    public double pf2;
    public double pf3;
// constructor
}

所以我试图运行的查询不起作用。它永远不会从我的收藏中返回任何文件。目前,DateTime lowDate和highDate的精度为秒。有趣的是,如果我使用内置的DateTime设置DateTime。现在查询有效。

// Not working
DateTime lowDate = new DateTime(2015,3,26,22,27,0);
DateTime highDate = new DateTime(2015,3,26,22,30,0);

//working
DateTime lowDate = DateTime.Now.AddMinutes(-10);
DateTime highDate = DateTime.Now.AddMinutes(-1);

正如帖子开头所提到的,我之前已经能够通过如上所示设置DateTime值来获得所需的结果。但是,根据我当前的数据库结构,这不起作用。

1 个答案:

答案 0 :(得分:0)

所以可能有更好的方法来解决这个问题,但这对我来说很有用。

        DateTime ownLow = new DateTime(2015, 3, 28, 21, 28, 13, 0);
        DateTime ownHigh = new DateTime(2015, 3, 28, 21, 28, 20, 0);

        string stringLow = ownLow.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ");
        string stringHigh = ownHigh.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ");

        DateTime lowDate = Convert.ToDateTime(stringLow);
        DateTime highDate = Convert.ToDateTime(stringHigh);

为了让我能够使用此查询,我必须创建DateTime,将其解析为字符串,然后将其转换回DateTime值。