var sortedPerlVersions = perlVersions .Select(x => new { full = x, parts = x.Split('.').Select(n => Convert.ToInt32(n)).ToArray() }) .OrderBy(x => x.parts[0]).ThenBy(x => x.parts[1]).ThenBy(x => x.parts[2]) .Select(x => x.full) .ToList();