使用带有 mongodb 的 linq 选择 user-specified 日期之间的文档

Selecting documents between user-specified dates using linq with mongodb

我是 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# class。除了 BSonObjectId,class 包含一个 DateTime 和来自一个名为 RobotTimeStamps 的 class 的 objects 列表。

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
}

所以我尝试 运行 的查询不起作用。它从来没有 returns 我 collection 的任何文件。目前 DateTime lowDate 和 highDate 的设置精度为秒。有趣的是,如果我使用 built-in DateTime.Now 设置 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);

如 post 开头所述,我以前能够通过如上所示设置 DateTime 值来获得所需的结果。但是,对于我当前的数据库结构,这是行不通的。

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

        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 值。