我想按与常用修订历史记录序列中使用的顺序相关的顺序排序字符串列表。有些客户以“ - ”或“New”或其他特定代码开头,我可以使用LINQ定义自定义排序顺序。然而,在修订版A从修订版Z一直修订到修订版Z之后,它通过Rev AZ变成Rev AA,然后通过BZ修改BA,等等。我如何使用LINQ对以下列表进行排序?使用linq自定义排序字符串排序
我有此作为代码的一个例子的块:
List<string> revList = new List<string> { "A", "NC", "New", "AB", "PD", "PD1",
"PD2", "B", "-", "*", "BB", "NA" };
revList = revList.OrderByDescending(i => i.ToLower() == "pd").
ThenByDescending(i => i.ToLower() == "nc").
ThenByDescending(i => i.ToLower() == "na").
ThenByDescending(i => i.ToLower() == "new").
ThenByDescending(i => i.ToLower() == "pd1").
ThenByDescending(i => i.ToLower() == "pd2").
ThenByDescending(i => i.ToLower() == "-").
ThenByDescending(i => i.ToLower() == "*").
ThenBy(i => i).ToList();
foreach (string rev in revList)
Console.WriteLine(rev);
这将产生输出为:
PD
NC
NA
NEW
PD1
PD2
-
*
A
AB
B
B
我想产生:
PD
NC
NA
NEW
PD1
PD2
-
*
A
B
AB
BB
先按“长度”排序,例如在'ThenBy(i => i)之前插入'ThenBy(i => i.Length).'' –
Ivan,you win。我希望自第一次以来我可以为您的答案投票,但这是一条评论。谢谢。 – AuLion
为什么'PD'出现在'NC'是期望的结果? –