2012-02-08 56 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列存储订单是否在插入的时间整数与否。

所以,这将是很容易得到和排序整数和非整数订单。

相关问题