按多列排序,不会破坏上一列的顺序

时间:2017-07-13 16:01:30

标签: c# linq sorting

我有以下列(属性):日期,名称,时间。

数据类型: DateTime Date; string Name; TimeSpan Time;

我需要根据这三个属性应用自定义排序。我当前的代码看起来像这样:

var sortedData = data.OrderBy(x => x.Date)
        .ThenBy(x => x.Name)
        .ThenBy(x => x.Date.TimeOfDay);

这个解决方案的问题在于它造成了巨大的混乱。日期现在是混合顺序,也是名称。只有时间按其应该排序,因为它是最后一个正在排序的属性。

我想要达到的目的是:

规则1:首先,所有行按Date列排序(升序)

规则2:只有当下一行Name列相等时,才按Date列排序

规则3:然后,只有当下一行Time相等且下一行Date以相同的字母或其位置开头时,才按Name列排序在字母表中较小。

主要思想不是打破已排序的列。我怎么能实现这个解决方案?

1 个答案:

答案 0 :(得分:1)

我的建议是你要按日期排序(没有时间),然后按名称排序,然后按一天中的时间排序。请尝试以下代码:

var sortedData = data.OrderBy(x => x.Date.Date)
    .ThenBy(x => x.Name)
    .ThenBy(x => x.Date.TimeOfDay);