Если Position
должно быть действительным int
(скажем, Position = "7.83e+1"
считается не цифрой c и должно находиться в конце списка ) мы можем отсортировать по tuple :
var sortedPersons = persons
.OrderBy(item => (!int.TryParse(item.Position, out var v), v))
.ToList();
Здесь мы сначала сортируем по кортежу Item1
, который определяет, является ли item.Position
int
или нет:
!int.TryParse(item.Position, out int v)
поэтому действительные целые числа стоят на первом месте . Затем мы сортируем по кортежу Item2
, то есть проанализированное значение
v
, чтобы упорядочить Position
s. Если Position
должно быть double
(скажем, Position = "-7.83e-10"
- это совершенно верно ), вы можете использовать Innat3's решение или изменить int
на double
:
var sortedPersons = persons
.OrderBy(item => (!double.TryParse(item.Position, out var v), v))
.ToList();