有一个清单:
§21项目
§1项目
§13项目
§3项目
§2项目
我需要这样订购:
§1项目
§2项目
§3项目
§13项目
§21项目
但
之后newList = (from a in list orderby a.Name ascending select a).ToList();
我明白了:
§1项目
§13项目
§2项目
§21项目
§3项目
如何解决?
答案 0 :(得分:3)
... orderby int.Parse(a.Name.Split(" ")[1]) ...
答案 1 :(得分:3)
您正在寻找的是一种自然的排序,而不是默认的词法排序。可以在http://www.davekoelle.com/alphanum.html
找到实现自然排序的C#比较器答案 2 :(得分:1)
以容纳空白条目
newList = (from a in list
orderby String.IsNullOrEmpty(a)
? -1
: int.Parse(a.Name.Split(" ")[1]) ascending
select a).ToList();
答案 3 :(得分:1)
Google的答案是:Getting Linq to OrderBy an attribute value numerically。
from a in list
orderby int.Parse(a.Name)
select ...
答案 4 :(得分:1)
01
与1
不同。按字典顺序13
出现在3
之前。假设所有“段落”都以非零前缀整数为前缀,您需要解析每个整数并按顺序对列表进行排序。
如果列表项没有以整数作为前缀,则先前的答案将抛出FormatException
。
答案 5 :(得分:1)
这应该有效:
var list = new List<string> {"§ 21 Item", "§ 1 Item", "§ 13 Item", "§ 3 Item", "§ 2 Item"};
var orderedList = (from a in list orderby int.Parse(a.Split(' ')[1]) ascending select a).ToList();