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

本文关键字:int 字段 如果 排序 | 更新日期: 2023-09-27 18:23:38

我的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项放在列表的末尾,而不会出现任何错误。有可能吗?

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

尝试使用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;
 }

不要使用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;
}

如果可能,请尝试在数据库IsInteger中添加一列,该列在插入时存储顺序是否为整数。

因此,获取和排序整数和非整数订单将很容易。