我有一个需要按日期订购的商品清单。
我的第一次尝试是transactions.OrderByDescending(t => t.PostDate)
,它给了我一个像这样的列表
Trans Date | Post Date | Name
07/15/14 07/16/14 Thing B
07/15/14 07/16/14 Thing A
07/11/14 07/13/14 Thing D
07/12/14 07/13/14 Thing C
07/09/14 07/10/14 Thing E
这显然是错误的。我从内部公司网站上订购A到E的东西,必须订购相同的东西。
我的下一次尝试是
transactions.OrderByDescending(t => t.PostDate).ThenByDescending(t => t.TransactionDate
有点帮助:
Trans Date | Post Date | Name
07/15/14 07/16/14 Thing B
07/15/14 07/16/14 Thing A
07/12/14 07/13/14 Thing C
07/11/14 07/13/14 Thing D
07/09/14 07/10/14 Thing E
如你所见,它修正了C和D的排序(耶!)。现在我唯一的问题是事物A和B.在每种情况下,交易日期和发布日期相同,这两个项目都会被切换。它们应该翻转,一切都会好的。
我猜测下一个时间戳的其他网站订单,但我没有那个。但是,只需切换A和B即可。有没有人知道如何让这个订单起作用?
编辑:事物A和事物B不是数据的真实名称,也不按名称排序。最终结果应该是
Trans Date | Post Date | Name
07/15/14 07/16/14 Thing A
07/15/14 07/16/14 Thing B
07/12/14 07/13/14 Thing C
07/11/14 07/13/14 Thing D
07/09/14 07/10/14 Thing E
基本上,每当两件事的转换日期和发布日期相同时,我想切换它们。是否有订购方式?
答案 0 :(得分:2)
如果您总是按顺序获得交易,您需要切换类似的项目,您可以在开始排序之前调用Reverse
。由于排序是稳定的,因此将保留相似项目的新订单:
transactions.Reverse();
transactions.OrderByDescending(t => t.PostDate)
.ThenByDescending(t => t.TransactionDate);
除此之外,您似乎还需要将数据的时间部分恢复,以便使您的排序正确。
正如Bobo在评论中指出的那样,你可以命令升序,然后反转整个结果集,得到相同的结果,这可能更整洁,因为它只有一行:
transactions.OrderBy(t => t.PostDate)
.ThenBy(t => t.TransactionDate)
.Reverse();
答案 1 :(得分:1)
应该像使用Enumerable.ThenBy
OrderBy
添加其他Name
一样简单
transactions.OrderByDescending(t => t.PostDate)
.ThenByDescending(t => t.TransactionDate)
.ThenBy(t=> t.Name);
答案 2 :(得分:0)
如果表具有IDENTITY的主键,那么在创建时会增加。
因此您可以将PK用作“原始订单”:
transactions.OrderByDescending(t => t.PostDate)
.ThenByDescending(t => t.TransactionDate)
.ThenBy(t => t.PK)