对于背景,我使用的是MongoDB和Rob Conery的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。我看不出那些导致问题的原因。
此外,在调试时,在无效的机器上,您可以看到集合中的项目,如果您一起删除排序,它将起作用。这让我完全陷入困境。
答案 0 :(得分:0)
对我来说,听起来像MongoDB LINQ提供程序中的一个好老式错误。如果您尝试以下代码会发生什么?它是否以反向日期顺序返回所有项目?如果是这样,可能是LINQ提供程序根本不支持复杂的查询。
using (var session = new Session<ContextItem>())
{
var allByDateReverse =
session.QueryCollection.OrderByDescending(x => x.CreatedOn);
ViewData.Model = allByDateReverse.ToList();
}
答案 1 :(得分:0)
x.CreatedOn的内容是什么?查询
在实际使用contentCollection之前,不会执行其中(x =&gt; x.CreatedOn&lt; DateTime.Now)
。在第二个示例中,ToList()导致查询立即执行,而组合的Where(..)。OrderByDescending(..)可能稍后执行(不知道ViewData.Model做了什么)。可能与那里的一些奇怪的时间问题有关。