订购不排序包含Linq数字的字符串

时间:2012-05-19 04:23:24

标签: linq entity-framework linq-to-sql iqueryable

我在数据库中有一个字符串字段,用于将数字保存为字符串。当我想在Linq中根据此字段进行订购时如下所示,但 的订单效果不佳。它像这样订购

1 - 2 - 3 - 25 - 11 - 30 - 50 ===> 1 - 11 - 2 - 25 - 3 - 30 - 50

   IQueryable<Tbl_Melk> Melks =
   from melk in Tbl_Melk
   where melk.Mantaghe == Mantaghe && melk.Hoze == Hoze && melk.Block == Block
   orderby melk.Melk
   select melk;

3 个答案:

答案 0 :(得分:1)

实际上,这是正确的顺序,因为它按字母顺序对值进行排序。除非您将数据强制转换为数字类型,否则LINQ无法判断数据是否包含数字。看看这个问题,找到一种方法来排序你想要的方式。

Linq - Order by number then letters

答案 1 :(得分:1)

莫里斯说的是对的,你可以试试这个:

var Melks = from melk in Tbl_Melk.ToList()
let integer = int.Parse(melk)
orderby integer
where melk.Mantaghe == Mantaghe && melk.Hoze == Hoze && melk.Block == Block
orderby melk.Melk
select melk;

但是你失去了性能和IQuerable界面。

答案 2 :(得分:1)

用零填充字符串。

出于我的大脑以及缺乏不支持LeftPad的EntityFramework:

....
orderby SqlFunctions.Replicate("0", 10 - melk.Melk.Length) + melk.Melk