使用linq排序具有null属性的对象列表

时间:2012-01-10 20:33:08

标签: c# linq

我有一个对象模型MyObject,它包含一个可空字节作为其属性之一。 如何对此键上的MyObjects列表进行排序,以便根据此属性的值进行升序排序,并使用最后出现空值的对象。

感谢您的建议。

4 个答案:

答案 0 :(得分:9)

Linqs OrderBy附带一个接受IComparer的重载。这样您就可以按照自己的方式对对象进行排序。

快速举例:

public class NullByteComparer : IComparer<byte?>
{
    public int Compare(byte? a, byte? b)
    {
        if (a == b)
            return 0;
        if (a == null)
            return 1;
        if (b == null)
            return -1;
        return return a < b ? -1 : 1;
    }
}

使用它

yourObjects.OrderBy(x => x.NullByteProperty, new NullByteComparer());

答案 1 :(得分:3)

创建IComparer<byte?>界面的自定义实现。

答案 2 :(得分:1)

使用??运算符强制null值到后面,如下所示:

var res = myList.OrderBy(v => (uint?)v.NullableByteProp ?? uint.MaxValue);

你需要转换为uint?,否则你的空值将与你的0xFF一起排序。

答案 3 :(得分:1)

当null等于GetValueOrDefault

时,您可以使用Byte.MaxValue()函数提供值
var orderedValues = values.OrderBy(v => v.GetValueOrDefault(Byte.MaxValue));