The problem is that you are trying to sort strings as if they were numbers - that doesn't work, because the sort order is different. With strings, the sort order goes:
1
10
11
12
...
19
2
20
...
What you need to do is convert them to numbers are sort those. Probably, the best way is to use a class, but a quick and dirty method would be to do this:
List<string> list = new List<string>(){ "121212-1","121212-7","121212-6","121212-16","121212-4","121212-15","121212-14"};
list = list.OrderBy(x => int.Parse(x.Split('-')[0])).ThenBy(x => int.Parse(x.Split('-')[1])).ToList();
foreach (string s in list)
{
Console.WriteLine(s);
}
But you would need to be sure that every string was in the right format first or you will get null reference or parse errors!