OrderBy
с пользовательским IComparer
может быть полезным.Попробуйте это:
var list = new List<string> { "M10", "M2", "M9", "M1", "M22" };
Console.WriteLine(string.Join(", ", list.OrderBy(_ => _, new Comparer())));
// M1, M2, M9, M10, M22
Где пользовательский IComparer<string>
может быть реализован так:
class Comparer : IComparer<string>
{
public int Compare(string x, string y)
=> x.Length != y.Length ? x.Length - y.Length : string.Compare(x, y);
}