using System.Collections.Generic;
using System.Text.RegularExpressions;
public static void Main()
Console.WriteLine("Sorting Stuff Demo");
List<Tuple<int,Guid>> mixOfThings = new List<Tuple<int,Guid>>();
List<Guid> guids = new List<Guid>(5);
for(int i = 0; i<5; i++){
guids.Add(Guid.NewGuid());
for(int i = 0; i<15; i++){
mixOfThings.Add(Tuple.Create(r.Next(0,5),guids[i%5]));
Console.WriteLine("Unsorted Collection");
foreach(var i in mixOfThings){
List<Tuple<long,int,Guid>> prSort = new List<Tuple<long,int,Guid>>();
foreach(var item in mixOfThings){
var computedOrder = long.Parse(Regex.Replace(item.Item1.ToString(), "[^0-9.]", "")) + long.Parse(Regex.Replace(item.Item2.ToString(), "[^0-9.]", "").Substring(0, 5));
prSort.Add(Tuple.Create(computedOrder,item.Item1,item.Item2));
Console.WriteLine("Proposed in PR");
Console.WriteLine(string.Join(Environment.NewLine,prSort.OrderByDescending(x => x.Item1)));
var oProductId = mixOfThings.OrderByDescending(x => x.Item1);
Console.WriteLine("Ordered By Product Id");
foreach(var i in oProductId){
var oGuid = mixOfThings.OrderByDescending(x => x.Item2);
Console.WriteLine("Ordered By Guids");
Console.WriteLine("Ordered by product then Guid");
var oProductAndGuid = mixOfThings.OrderByDescending(x => x.Item1).ThenByDescending(x => x.Item2);
foreach(var i in oProductAndGuid){
Console.WriteLine("Ordered by Guid then Product");
var oGuidAndProduct = mixOfThings.OrderByDescending(x => x.Item2).ThenByDescending(x => x.Item1);
foreach(var i in oProductAndGuid){