【发布时间】:2012-08-17 06:42:04
【问题描述】:
我在 linqtosql 中有一个返回 LabelNumber 的查询:
var q = from list in db.Lists
select list.LabelNumber;
var q 然后变成IEnumerable<string> ,其元素如下:
{"1","2","2.A","2.B","3","3.A","3.B"}
我基本上想对上面显示的元素进行排序,但我不能使用OrderBy(x=>x.LabelNumber),因为"10" 会放在"1" 之后和"2" 之前。
我假设我必须编写一个自定义比较器函数,但是我该如何使用 linq 来实现呢?
编辑:我认为以下所有答案都有效,但必须在所有回复中添加一个警告。
如果您使用的是 Linq2SQL,则不能在查询中使用数组索引。为了克服这个问题,您应该有两个查询。从 SQL 读取的一种。第二个进行排序:
var q = from list in db.Lists
select list.LabelNumber;
var q2 = q.AsEnumerable()
.OrderBy(x => int.Parse(x.LabelNumber.Split('.')[0]))
.ThenBy(x => x.Number
.Contains(".") ?
x.LabelNumber.Split('.')[1].ToString()
:
string.Empty);
【问题讨论】:
-
仅供参考,按照您想要的方式对数字进行排序称为“自然排序”。