2012-02-08 30 views
1

我有LINQ(在C#)的問題。我需要一個領域,這應該是int訂購的記錄列表,但有時不是:排序字段(INT)。如果該字段不是int?

from MyObject obj in new MyObject() 
where obj.Visibile=="1" 
orderby Int32.Parse(obj.Order) ascending 
select obj; 

,正如我說的,如果obj.Order是不是int,我得到一個錯誤:系統.FormatException:輸入字符串格式不正確。

我想把非INT項目在列表的末尾,沒有得到任何錯誤。可能嗎?

回答

5

嘗試通過使用馬鳴的TryParse

int myInt;     
from obj in MYobjects 
     where obj.Visibile=="1" 
     orderby (int.TryParse(Str, out myInt) ? myInt: 0) 
     select obj; 

OR

MYobjects.OrderBy(r => Number(r.str); 
//private function 
int Number(string str) 
{ 
     int result_ignored; 
     if (int.TryParse(str,out result_ignored)) 
      return result_ignored; 

     else 
      return 0; 
} 
+0

那更簡單的! – Marshal 2012-02-08 08:20:35

+0

第一個解決方案真的很棒!謝啦! – markzzz 2012-02-08 08:30:01

4

不要使用Int32.Parse,而是用你自己創建一個使用Int32.TryParse嘗試解析整型的方法。如果成功,返回數字發現,如果失敗則返回Int32.MaxValue吃出底。

from MyObject obj in new MyObject() 
where obj.Visibile=="1" 
orderby TryParse(obj.Order) ascending 
select obj; 


public int TryParse(string value) 
{ 
    int val; 
    if (Int32.TryParse(value, out val)) 
     return val; 

    return Int32.MaxValue; 
} 
1

如果有可能嘗試添加數據庫IsInteger列存儲訂單是否在插入的時間整數與否。

所以,這將是很容易得到和排序整數和非整數訂單。

相關問題