我遇到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项放在列表的末尾,而不会出现任何错误。有可能吗?
答案 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
中添加一个列,该列存储在插入时订单是否为整数。
因此,很容易获得整数和非整数订单并对其进行排序。