Try using OrderBy:
List<KeyValuePair<int, string>> myList = new List<KeyValuePair<int, string>>();
myList.Add(new KeyValuePair<int,string>(9, "Nine"));
myList.Add(new KeyValuePair<int,string>(1, "One"));
myList.Add(new KeyValuePair<int,string>(3, "Three"));
myList = myList.OrderBy(kvp => kvp.Key).ToList();
foreach (var kvp in myList) Console.WriteLine("{0}:{1}", kvp.Key, kvp.Value);
myList = myList.OrderBy(kvp => kvp.Value).ToList();
foreach (var kvp in myList) Console.WriteLine("{0}:{1}", kvp.Key, kvp.Value);
You will get:
1:One
3:Three
9:Nine
And
9:Nine
1:One
3:Three