Linq OrderByDescending ThenByDescending Issue

时间:2010-08-10 20:45:33

标签: c# asp.net-mvc linq

嗨我在使用linq订购时遇到问题。 我有一个带有两个日期时间字段的对象。一个只存储日期(例如8/2/2010)并将时间保留为全0

虽然在制作记录时创建了另一个日期时间字段,并且还有时间。这两个领域的想法是因为我可能想要在我的网站上添加几天的“标题/文章”。因此,我选择的第一个Datetime称为“Date”,通常这是默认为今天的日期。

我遇到的问题是我可以按日期订购,但如果我在同一日期添加了一些文章(因此在日期库中它们的日期字段都相同),最新的文章将放在三者的底部!

例:
Article1 - 12/08/2010 - 12/08/2010 2:45 pm
第2条 - 12/08/2010 - 12/08/2010 3:45 pm
第3条 - 12/08/2010 - 12/08/2010 4:45 pm
第4条 - 11/08/2010 - 12/08/2010 2:50 pm

它们似乎只按日期字段排序而不是日期字段然后创建日期字段,我认为它们应该在我使用命令时(因为它们的日期字段相同)

HeadlineRepository.All().OrderByDescending(x => x.Date).ThenByDescending(x => x.Created).Take(8)

在这里输了一点试图将它们交换在一起但是没有产生我想要的结果。似乎它只是忽略了thenbydescending ......

史蒂夫

EDITED

为您提供更多信息

Headlines = repository.All().OrderByDescending(x => x.Date).ThenByDescending(x => x.Created)

生成(显示日期然后显示)

10/08/2010 00:00:00 10/08/2010 19:27:46

10/08/2010 00:00:00 10/08/2010 19:27:21

09/08/2010 00:00:00 10/08/2010 21:28:11

09/08/2010 00:00:00 09/08/2010 00:00:00

while Gives

Headlines = repository.All().OrderByDescending(x => x.Created).ThenByDescending(x => x.Date),

09/08/2010 00:00:00 10/08/2010 21:28:11

10/08/2010 00:00:00 10/08/2010 19:27:46

10/08/2010 00:00:00 10/08/2010 19:27:21

09/08/2010 00:00:00 09/08/2010 00:00:00

1 个答案:

答案 0 :(得分:2)

看来你的逻辑是正确的。我已在http://pastebin.org/467317

的控制台应用中重现了您的方案

使用此语句可生成您期望的结果。

reg.OrderByDescending(x=>x.RegisteredOn)
   .ThenByDescending(x=>x.StartsClassOn)
   .Take(8)

您是将LINQ查询分配给变量还是确保它按预期执行?

alt text