Поскольку число символов в начале является переменной, регулярное выражение помогло бы:
var re = new Regex(@"\d+$"); // finds the consecutive digits at the end of the string
var result = partNumbers.OrderBy(x => int.Parse(re.Match(x).Value));
Если было фиксированное количество символов префикса, то вы могли бы использовать метод Substring
для извлечение, начиная с соответствующих символов:
// parses the string as a number starting from the 5th character
var result = partNumbers.OrderBy(x => int.Parse(x.Substring(4)));
Если числа могут содержать разделитель десятичных чисел или разделитель тысяч, то регулярное выражение должно также допускать эти символы:
var re = new Regex(@"[\d,]*\.?\d+$");
var result = partNumbers.OrderBy(x => double.Parse(x.Substring(4)));
Если строка, возвращаемая регулярным выражением или Substring
, может быть недоступна с помощью int.Parse
/ double.Parse
, используйте соответствующий вариант TryParse
:
var re = new Regex(@"\d+$"); // finds the consecutive digits at the end of the string
var result = partNumbers.OrderBy(x => {
int? parsed = null;
if (int.TryParse(re.Match(x).Value, out var temp)) {
parsed = temp;
}
return parsed;
});