我在数据库中有一个字符串字段,用于将数字保存为字符串。当我想在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;
答案 0 :(得分:1)
实际上,这是正确的顺序,因为它按字母顺序对值进行排序。除非您将数据强制转换为数字类型,否则LINQ无法判断数据是否包含数字。看看这个问题,找到一种方法来排序你想要的方式。
答案 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