While working on my project I've encountered a little glitch in the way that List works.
I have this list for example:
# Username - Status - Order - Timestamp Admin, Available (int 0), 2, 10:45 User1, Not available (int 2), 1, 10:44 User2, Available, 3, 10:52 User3, Busy (int 1), 4, 10:33 I want a way to order it by multiple properties using something like a comparer.
I would like it to order by Status, so Available comes first, then by Timestamp to know who was first in the list.
So it would output:
Admin, 0, 0, 10:45 User2, 0, 1, 10:52 User3, 1, 2, 10:33 User1, 2, -1, 10:44 The User1 order must become -1 because it is not available so I want it to show last in my list, as busy users comes just before.
I need to keep an order because I want to know who's next. I tried to iterate the old list with ordering it then creating a new one with the good order but it doesn't work.
Here's the method I use:
public static List<ListMember> ReOrder(this List<ListMember> list) { int Index = 0; List<ListMember> newList = new List<ListMember>(); foreach (ListMember member in list.OrderBy(x => x.ListOrder).ThenBy(x => x.DateEntered)) { if (member.DateExited == null) { member.ListOrder = Index; Index++; } else { member.ListOrder = -1; } newList.Add(member); } return newList; } This is needed because when someone pass from status 1 to 0, he become available but I don't want him to go first, I want him to go last in the list, then reindex the list.
Does someone have an idea on how a list can be greatly ordered.