C#Array:按降序排序,包括空值

时间:2012-06-05 20:04:27

标签: c# arrays null sql-order-by

我有一个(总是4个)对象的数组,我需要通过对象成员的降序来排序 我曾想过把它命名为

Array = Array.OrderByDescending(p => p.Val)

当其中一个值为null时,这就失败了。所以我的目标是什么,但我的LINQ不能满足,是:

Array = Array.OrderByDescending(p => if( p != null ) p.Val; else float.MinValue)

如何在不删除并稍后重新添加空值的情况下完成此排序?谢谢你的帮助。

3 个答案:

答案 0 :(得分:12)

使用三元条件运算符:

Array = Array.OrderByDescending(p => p != null ? p.Val : float.MinValue)

根据下面的评论,你不能使用if/else的原因是因为lambda的主体(p =>右边的东西)必须是一个表达式,除非你包围整个用花括号的东西。为了说明,如果您愿意, 也可以使用if/else

Array = Array.OrderByDescending(p => 
{
    if (p != null) return p.Val; 
    else return float.MinValue;
});

但显然更加冗长。

答案 1 :(得分:2)

我不确定您正在使用哪些对象/类型,但可能尝试使用以下三元运算符:

Array = Array.OrderByDescending(p => p == null ? float.MinValue : p.Val)

答案 2 :(得分:0)

使用此运算符:

Array = Array.OrderByDescending( p => p ?? float.MinValue)