#c# #.net #linq #mongodb
#c# #.net #linq #mongodb
Вопрос:
Для фона я использую MongoDB и драйвер linq от Роба Конери. Таким образом, код, который я пытаюсь:
using (var session = new Session<ContentItem>())
{
var contentCollection = session.QueryCollection.Where(x => x.CreatedOn < DateTime.Now).OrderByDescending(y => y.CreatedOn).ToList();
ViewData.Model = contentCollection;
}
это сработает на одной машине, но на другой машине я не получаю никаких результатов. Чтобы получить результаты, я должен сделать
using (var session = new Session<ContentItem>())
{
var contentCollection = session.QueryCollection.Where(x => x.CreatedOn < DateTime.Now).ToList();
ViewData.Model = contentCollection.OrderByDescending(y => y.CreatedOn).ToList();
}
Я должен выполнить ToList() в обеих строках, иначе результатов не будет. Если я пытаюсь связать что-либо в цепочку, это ломается. Это тот же проект, все dll загружены локально. Обе машины имеют одинаковую платформу, версии Visual Studio и дополнения. разница лишь в том, что у одного есть VisualSVN, а у другого AnkhSVN. Я не вижу тех, кто вызывает проблему.
Кроме того, во время отладки на компьютере, который не работает, вы можете видеть элементы в коллекции, и если вы удалите упорядочивание всех вместе, это сработает. Это поставило меня в полное замешательство.
Комментарии:
1. Возможно, это связано с интерпретацией окончаний строк различными движками svn… Это долгий путь, но это все, что у меня есть…
Ответ №1:
Для меня это звучит подозрительно, как старая добрая ошибка в поставщике LINQ MongoDB. Что произойдет, если вы попробуете приведенный ниже код? Возвращает ли он все элементы в обратном порядке по дате? Если это так, возможно, поставщик LINQ просто не поддерживает сложные запросы.
using (var session = new Session<ContextItem>())
{
var allByDateReverse =
session.QueryCollection.OrderByDescending(x => x.CreatedOn);
ViewData.Model = allByDateReverse.ToList();
}
Комментарии:
1. Спасибо за предложение. Поставщик поддерживает запрос, поскольку он работает на первом компьютере. Это моя вторая машина для разработки, на которой запрос не работает. Как я уже говорил, весь код одинаков, извлечен из того же репозитория svn.
Ответ №2:
Каково содержимое x.CreatedOn ? Запрос
Где(x => x.CreatedOn < DateTime.Now)
не выполняется до тех пор, пока contentCollection фактически не будет использован. Во втором примере ToList() вызывает немедленное выполнение запроса, в то время как объединенный Where(..).OrderByDescending(..) может быть выполнен позже (не знаю, что такое ViewData.Модель делает). Возможно, это связано с некоторыми странными проблемами с синхронизацией.