如何订购段落列表

时间:2010-12-21 10:20:01

标签: c# linq list sql-order-by

有一个清单:
§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项目

如何解决?

6 个答案:

答案 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)

011不同。按字典顺序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();