2012-05-19 75 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