Как получить драйвер C# Mon go для сравнения поля DateTime с использованием выражений Linq? - PullRequest
2 голосов
/ 07 апреля 2020

Я создаю запрос на выборку для передачи в MongoDB с помощью выражений Linq.

Я хочу запросить в коллекции документы с DateTimePosed <указанной датой. (Переменная <code>repository представляет собой IQueryable, полученную из IMongoCollection.AsQueryable()):

var parameter = Expression.Parameter(typeof(T), "x");
var finalExpression = Expression.Lambda<Func<T, bool>>(Expression.Constant(true), parameter);
finalExpression.Apply(Expression.LessThan(SomeBusinessObject.DateTimePosted, new DateTime(1988, 2, 1)));
var query = repository.Query;
var results = query.Select(o => o.OfferId.Value).ToList();

Когда я запускаю код, результаты пусты. При отладке я вижу, что сгенерированный запрос выглядит следующим образом:

aggregate([{
    "$match" : { "DateTimePosted" : { "$lt" : "1988-02-01T00:00:00-06:00" } }
}])

Когда я запускаю его в клиенте mon go, он возвращает 0:

db.getCollection('somecollection').aggregate([{
    "$match" : { "DateTimePosted" : { "$lt" : "1988-02-01T00:00:00-06:00" } }
}]);

Но если я изменяю запрос выглядит так:

db.getCollection('somecollection').aggregate([{
    "$match" : { "DateTimePosted" : { "$lt" : ISODate("1988-02-01T00:00:00-06:00") } }
}]);

возвращает результаты.

Подскажите, пожалуйста, что я делаю не так?

1 Ответ

1 голос
/ 26 апреля 2020

Я понял, что было не так: мы сохраняем значения даты и времени в виде строк.

Мне пришлось передать действительное значение даты и времени в виде строки, чтобы сравнение работало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...