using System.Collections.Generic;
public static void Main (string[] args) {
var test = new List<List<string>>();
test.Add(new List<string> {"1","2","3"});
test.Add(new List<string> {"1","4","5"});
test.Add(new List<string> {"1","2","3"});
test.Add(new List<string> {"1","4","5"});
test.Add(new List<string> {"6","7","8"});
var query = test.OrderBy(a=>a[0]);
var max = test.Select(a=>a.Count()).Max();
for (int i = 1; i < max; i++)
query = query.ThenBy(a=>a[j]);
var sorted = query.ToList();
foreach(var catGroup in test)
Console.WriteLine(string.Join(">", catGroup));
foreach(var catGroup in sorted)
Console.WriteLine(string.Join(">", catGroup));