using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace reactive_test { class Program { public static void Main() { List val1 = new List { "File_1.txt","File_2.txt","File_1_Over.txt","File_2_Item.txt","File_1_Over.bat", "File_1_Over_test.bat","File_2_Standard.bat","File_2_Item_Standard.bat" }; //val1.Sort(( x, y ) => string.Compare( Path.GetExtension(y), Path.GetExtension(x) )); var val = val1 .GroupBy(f => Path.GetFileNameWithoutExtension(f)) .OrderBy(group => group.Key); foreach (var group in val) { var q = group.OrderByDescending(f => Path.GetExtension(f)); foreach (var f in q) { Console.WriteLine(f); } } } } }