2012-05-19 52 views
0

我在数据库中有一个字符串字段,它将数字保存为字符串。当我想根据Linq的这个字段进行订购时,请按照以下顺序进行订购:不需要。它定购这样Orderby未订购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; 

回答

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接口。

+0

TNX但它有**错误**:LINQ到实体无法识别方法“的Int32解析(System.String) '方法,并且此方法不能转换为商店表达式。 – ArMaN

+0

Ups,Linq试图将它转换为一个sql语句,我将添加一个解决方法,但效率较低。 –

+0

只是为了防止解决方案发布[Linq - 按数字和字母顺序](http://stackoverflow.com/questions/5120970/linq-order-by-number-then-letters)也可以在程序中进行排序。 –

1

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

Linq - Order by number then letters

1

LeftPad字符串为零。

从我的大脑和缺乏的EntityFramework的不支持LeftPad:

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