Let's say I have a List of Songs.
Song { public string Name = ""; public int PlayOrder = 0; }
Now I want to sort them first by PlayOrder starting at zero and second by Name alphabetically.
So an example set of sorted results would be (Name, PlayOrder):
/* Pachelbel's Canon, 0 A Happy Song, 4 Beethoven's 5th, 4 Some Other Song, 7 */
See how the PlayOrder = 4 ones are in order alphabetically? That's what I'm going for.
Right now I have it only sorting by one field:
List<Song> final = new List<Song>(); ... final.Sort((x, y) => x.PlayOrder.CompareTo(y.PlayOrder)); return final;
How can I also sort by Name as demonstrated above?
Sorting in C# In C#, we can do sorting using the built-in Sort / OrderBy methods with the Comparison delegate, the IComparer , and IComparable interfaces.
return final.OrderBy(s => s.PlayOrder).ThenBy(s => s.Name);
If you want to continue using the sort method you will need to make your comparison function smarter:
final.Sort((x, y) => { var ret = x.PlayOrder.CompareTo(y.PlayOrder); if (ret == 0) ret = x.Name.CompareTo(y.Name); return ret; });
If you want to use LINQ then you can go with what K Ivanov posted.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With