一尘不染

如何使用LINQ对文本字符串和数字进行排序

c#

我一直在使用以下排序:

var query = _cityRepository.GetAll(
               .OrderBy(item => item.RowKey.Substring(0, 4))
               .ThenBy(item => item.ShortTitle)

但是我有一个问题,因为我的ShortTitle看起来像这样:

Liverpool - 1
Liverpool - 2
...
Liverpool - 9
Liverpool - 10
Liverpool - 11
West Kirby - 1
West Kirby - 8
West Kirby - 12

当我使用LINQ对它进行排序时

Liverpool - 1
Liverpool - 11
Liverpool - 12
Liverpool - 2
West Kirby - 1
West Kirby - 12
West Kirby - 8

ShortTitle始终是一串单词,后跟一个连字符和一个数字。

有什么办法可以使我正确排序吗?


阅读 681

收藏
2020-05-19

共1个答案

一尘不染

这是因为您将它们作为字符串排序,并且字符串11排在2之前。您需要解析,ShortTitleint在末尾给您(我假设)值,然后按该值排序。

您的LINQ查询可以更改为此,以使其正常工作:

var query = _cityRepository.GetAll(
           .OrderBy(item => item.RowKey.Substring(0, 4))
           .ThenBy(item => item.ShortTitle.Split('-').First())
           .ThenBy(item => Convert.ToInt16(item.ShortTitle.Split().Last()));
2020-05-19