使用linq对具有字符串属性的对象列表进行排序



我有一个列表List<Perfume>,具有字符串属性OrderNumber,格式为PE_00344,每个OrderNumberPE_开始,然后是其实际订单号(使用(ToString("D6"))转换为字符串,这是一个递增的数字。

现在我想把这个List<Perfume>OrderNumber排序。我使用下面的

IEnumerable<Perfume> tempPerfumes = 
listOfPerfumes.OrderByDescending(a => Convert.ToDecimal(a.OrderNumber.Split('_')[1]));

,但它不工作,任何想法为什么它不排序列表?我错过什么了吗?

我想在你的类中添加一个额外的只读属性来简化我的生活:

class Program
{
static void Main(string[] args)
{
List<Perfume> perfumes = new List<Perfume>();
perfumes.Add(new Perfume("P_1002"));
perfumes.Add(new Perfume("P_100"));
perfumes.Add(new Perfume("P_1"));
var sortedPewrfumes = perfumes.OrderByDescending(p => p.IntegerOrderNumber);
foreach (var perfume in perfumes)
Console.WriteLine(perfume.OrderNumber);
Console.ReadKey();
}
}
class Perfume
{
public Perfume(string orderNumber)
{
OrderNumber = orderNumber;
}
public string OrderNumber { get; }
public int IntegerOrderNumber
{
get
{
return int.Parse(OrderNumber.Split('_')[1]);
}
}
}

它可以工作,您使用orderbydescent从最大到最小排序。

List<Perfume> listOfPerfumes = new List<Perfume>();
listOfPerfumes.Add(new Perfume() { OrderNumber = "PE_00346 " });
listOfPerfumes.Add(new Perfume() { OrderNumber = "PE_00344 " });
listOfPerfumes.Add(new Perfume() { OrderNumber = "PE_00345 " });
var collection = listOfPerfumes.OrderByDescending(a => Convert.ToInt32(a.OrderNumber.Split('_')[1])).ToList();

最新更新