使用linq对具有null属性的对象列表进行排序
本文关键字:列表 对象 排序 属性 linq null 使用 | 更新日期: 2023-09-27 18:20:07
我有一个对象模型MyObject,它包含一个可为null的字节作为其属性之一。如何对该键上的MyObjects列表进行排序,以便根据该属性的值按升序排列列表,最后显示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));