Первое, что на ум приходит - разделить список на два сегмента: текущий день и все остальное.
int day = dateList.Select(day => day.DEN).Max();
IEnumerable<...> first = dateList.Where(day => day.DEN.Equals(day));
IEnumerable<...> other = dateList.Where(day => !day.DEN.Equals(day));
Потом сортировать их по отдельности как нужно и обратно объединить:
first = first.OrderByDescending(hours => hours.CAS);
other = other.OrderByDescending(day => day.DEN).ThenBy(hours => hours.CAS);
IEnumerable<...> sorted = first.Concat(other);
Пример работы (Консоль .NET 6):
List<dateClass> dateList = new List<dateClass>()
{
new dateClass(){ DAY = 03, HOUR = 18 },
new dateClass(){ DAY = 04, HOUR = 18 },
new dateClass(){ DAY = 04, HOUR = 16 },
new dateClass(){ DAY = 03, HOUR = 17 },
new dateClass(){ DAY = 03, HOUR = 16 },
new dateClass(){ DAY = 04, HOUR = 17 }
};
int day = dateList.Select(x => x.DAY).Max();
IEnumerable<dateClass> first = dateList.Where(x => x.DAY.Equals(day));
IEnumerable<dateClass> other = dateList.Where(x => !x.DAY.Equals(day));
first = first.OrderByDescending(x => x.HOUR);
other = other.OrderByDescending(x => x.DAY).ThenBy(x => x.HOUR);
IEnumerable<dateClass> sorted = first.Concat(other);
Console.WriteLine(string.Join(Environment.NewLine, sorted.Select(x => x.DAY.ToString() + ": " + x.HOUR.ToString())));
class dateClass
{
public int DAY { get; set; }
public int HOUR { get; set; }
}
Выводит:

Еще как вариант добавить столбцы нумерации из базы SQL. Например разные сортировки ROW_NUMBER()
от DENSE_RANK()
по дате:
SELECT
[t],
CASE
WHEN [t] = 1
THEN ROW_NUMBER() OVER (PARTITION BY [b] ORDER BY [a] DESC)
ELSE ROW_NUMBER() OVER (PARTITION BY [b] ORDER BY [a])
END AS [N],
[b],
[a]
FROM
(
SELECT
DENSE_RANK() OVER (ORDER BY [b] DESC) AS [t],
[b],
[a]
FROM
(
SELECT
CONVERT([date], [a]) AS [b],
[a]
FROM
(
SELECT CONVERT([datetime], '2023-04-05 18:25:43', 120) AS [a]
UNION ALL
SELECT CONVERT([datetime], '2023-04-07 18:04:43', 120)
UNION ALL
SELECT CONVERT([datetime], '2023-04-07 18:25:00', 120)
UNION ALL
SELECT CONVERT([datetime], '2023-04-07 17:14:12', 120)
UNION ALL
SELECT CONVERT([datetime], '2023-04-06 18:11:11', 120)
UNION ALL
SELECT CONVERT([datetime], '2023-04-06 16:01:35', 120)
UNION ALL
SELECT CONVERT([datetime], '2023-04-06 17:45:52', 120)
) t
) t2
) t3
ORDER BY
[t],
[N]
t |
N |
b |
a |
1 |
1 |
2023-04-07 |
2023-04-07 18:25:00.000 |
1 |
2 |
2023-04-07 |
2023-04-07 18:04:43.000 |
1 |
3 |
2023-04-07 |
2023-04-07 17:14:12.000 |
2 |
1 |
2023-04-06 |
2023-04-06 16:01:35.000 |
2 |
2 |
2023-04-06 |
2023-04-06 17:45:52.000 |
2 |
3 |
2023-04-06 |
2023-04-06 18:11:11.000 |
3 |
1 |
2023-04-05 |
2023-04-05 18:25:43.000 |