0

我在数据库中有一个字符串字段,将数字保存为字符串。当我想根据 Linq 中的此字段进行订购时,如下所示,但 orderby无法正常工作。它像这样订购

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;
4

3 回答 3

1

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

Linq - 按数字排序,然后按字母排序

于 2012-05-19T04:34:51.557 回答
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 接口。

于 2012-05-19T04:38:33.293 回答
1

LeftPad 用零填充字符串。

出于我的想法,缺乏不支持 LeftPad 的 EntityFramework:

....
orderby SqlFunctions.Replicate("0", 10 - melk.Melk.Length) + melk.Melk
于 2016-09-01T06:00:25.863 回答