按字段排序(int)。如果字段不是int?

时间:2012-02-08 08:12:15

标签: c# linq int

我遇到LINQ问题(在C#中)。我需要按字段排序记录列表,该列表应为int,但有时不是:

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

并且,正如我所说,如果obj.Order不是int,我会收到错误: System.FormatException:输入字符串的格式不正确。

我想将非int项放在列表的末尾,而不会出现任何错误。有可能吗?

3 个答案:

答案 0 :(得分:7)

尝试使用TryParse

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

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;
 }

答案 1 :(得分:4)

不要使用Int32.Parse,而是使用您自己创建的方法,使用Int32.TryParse来尝试解析int。如果成功,则返回找到的数字,如果失败则返回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;
}

答案 2 :(得分:1)

如果可以尝试在数据库IsInteger中添加一个列,该列存储在插入时订单是否为整数。

因此,很容易获得整数和非整数订单并对其进行排序。