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

本文关键字:列表 对象 排序 属性 linq null 使用 | 更新日期: 2023-09-27 18:20:07

我有一个对象模型MyObject,它包含一个可为null的字节作为其属性之一。如何对该键上的MyObjects列表进行排序,以便根据该属性的值按升序排列列表,最后显示null的对象。

谢谢你的建议。

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

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());

创建IComparer<byte?>接口的自定义实现。

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

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

您需要强制转换为uint?,否则您的null将与0xFF一起排序。

当null等于Byte.MaxValue 时,可以使用GetValueOrDefault()函数提供一个值

var orderedValues = values.OrderBy(v => v.GetValueOrDefault(Byte.MaxValue));