LINQ и естественный порядок сортировки

Какой простой способ получить запрос LINQ (из базы данных SQL - это важно?), чтобы упорядочить строки естественно?

Например, я получаю следующие результаты:

  • Проект 1
  • Проект 10
  • Проект 2

Я хотел бы видеть следующее:

  • Проект 1
  • Проект 2
  • Проект 10

Я использую этот запрос:

return from p in dataContext.Projects
    orderby p.Name
    select p;

Ответ 1

Нет встроенного способа сделать это с использованием платформы .NET, но я бы посоветовал вам читать Natural Sorting in С# для обсуждение темы и реализация с открытым исходным кодом.

Ответ 2

Я опаздываю на вечеринку на несколько лет, но я просто пытался решить подобную проблему, и это сработало для меня. Надеюсь, что кто-то еще найдет это полезным.

Скажите, что у вас есть строки в списке, попробуйте что-то вроде этого:

List<string> projects = new List<string>
{
    "Project 1",
    "Project 10",
    "Project 2"
};
//Sort by a substring of the string value which omits the non-numeric characters
IEnumerable<string> sorted = projects.OrderBy(p => p.Substring(p.IndexOf(' ') + 2, p.Length - (p.IndexOf(' ') + 2)));