Ive得到了如下的LINQ查询: -LINQ数字排序取代非数字字符
(from a in MyData
where a.Field1.Replace(" ","").Contains("ABCDEFG")
select a.Field2).Take(50)
它返回: -
114
115
115 A
116
116 A
118
119
122
124
128
131
132
133
95
96
97
98
99
我需要能够以数字排序这个名单,我可以这样做: -
(from a in MyData
where a.Field1.Replace(" ","").Contains("ABCDEFG")
select a.Field2).Take(50).OrderBy(x => Convert.ToInt32(x))
问题是这样的回报: -
Conversion failed when converting the nvarchar value '111 A ' to data type int.
因为它显然不能将'111 A '
转换为整数。
是否有任何方法去除所有非数字字符只是为了排序?
你想要的是一种自然排序。网络上有大量的资源。基本上,创建一个自定义'IComparer',它实现自然排序并将它的一个实例传递给OrderBy:'OrderBy(x => x,new NaturalStringComparer())'。 –
2013-03-20 14:41:00
TO支持以前的评论:这里的关于在C#中的自然排序的stackoverflow问题:http://stackoverflow.com/questions/248603/natural-sort-order-in-c-sharp – J0HN 2013-03-20 14:41:38
@DanielHilgarth它看起来像他正在使用LINQ to SQL,一个自定义的IComparer将不适合。 – 2013-03-20 14:42:20