Хотя мне понравился ответ kkoyuncu, он опирается на два OrderBy. Вы можете устранить это, используя Custom Comparer.
public class CustomComparer : IComparer<string>
{
public int Compare(string stringA, string stringB)
{
var isValueAInt = int.TryParse(stringA, out var valueA);
var isValueBInt = int.TryParse(stringB, out var valueB);
if(isValueAInt && isValueBInt)
{
return valueA - valueB;
}
else if(isValueAInt && !isValueBInt)
{
return-1;
}
else if(!isValueAInt && isValueBInt)
{
return 1;
}
return String.Compare(stringA,stringB);
}
}
Теперь ваш код будет выглядеть так:
string[] myArray = { "35", "7","110","10W","0EP","0ET","692"};
var comparer = new CustomComparer();
var result = myArray.OrderBy(a=>a,comparer);
выход
7
35
110
692
0EP
0ET
10W