在尝试使用OrderByDescending时,Linq会导致集合消失

时间:2010-04-16 19:11:42

标签: c# .net linq mongodb

对于背景,我使用的是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。我看不出那些导致问题的原因。

此外,在调试时,在无效的机器上,您可以看到集合中的项目,如果您一起删除排序,它将起作用。这让我完全陷入困境。

2 个答案:

答案 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的内容是什么?查询

  

其中(x =&gt; x.CreatedOn&lt; DateTime.Now)

在实际使用contentCollection之前,不会执行

。在第二个示例中,ToList()导致查询立即执行,而组合的Where(..)。OrderByDescending(..)可能稍后执行(不知道ViewData.Model做了什么)。可能与那里的一些奇怪的时间问题有关。