2015-03-26 2 views
0

Я новичок в MongoDB, и у меня возникла проблема с запросом. Запрос пытается найти все документы между двумя значениями DateTime. Я ранее мог запускать аналогичный запрос с желаемым результатом, однако с другой схемой базы данных. Применяя тот же запрос к моей текущей схеме базы данных, запрос не работает. Запрос выглядит следующим образом:Выбор документов между указанными пользователем датами с использованием linq с mongodb

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

rdb.TimeStampsCollection отображается в C# класс называется TimeStamp. За исключением 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.Now, запрос работает.

// 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, как показано выше. Однако с моей текущей структурой базы данных это не работает.

ответ

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.

 Смежные вопросы

  • Нет связанных вопросов^_^