C# 按一个属性对集合排序,如果为Null,则按不同的属性排序

C# 按一个属性对集合排序,如果为Null,则按不同的属性排序,c#,linq,sorting,C#,Linq,Sorting,我有一个自定义对象的类型化集合,它有两个DateTime?属性、ExpirationDate和ExpirationDateExtended。我正试图根据这些属性从这个集合中获取最新信息。通常,对于一个属性,我只使用OrderByDescending方法并获取第一个属性。这在下文中得到了说明 但是,我试图做的是,如果ExpirationDate属性有一个值(不是null),则按ExpirationDate属性排序(OrderByDescending),但是如果它没有值(null),则按Expira

我有一个自定义对象的类型化集合,它有两个DateTime?属性、ExpirationDate和ExpirationDateExtended。我正试图根据这些属性从这个集合中获取最新信息。通常,对于一个属性,我只使用OrderByDescending方法并获取第一个属性。这在下文中得到了说明

但是,我试图做的是,如果ExpirationDate属性有一个值(不是null),则按ExpirationDate属性排序(OrderByDescending),但是如果它没有值(null),则按ExpirationDateExtended属性排序(OrderByDescending)

在下面的示例中,myCollection变量表示自定义对象的集合

var latestExpirationDate = myCollection
.Where(item => item.ExpirationDate.HasValue)
OrderByDescending(item => item.ExpirationDate)
.Select(item => item.ExpirationDate) 
.FirstOrDefault();

您可以比较
null
的字段,然后使用条件运算符指定字段,如:

OrderByDescending(item => item.ExpirationDate != null ? item.ExpirationDate :
                                                        item.ExpirationDateExtended)

您可以比较
null
的字段,然后使用条件运算符指定字段,如:

OrderByDescending(item => item.ExpirationDate != null ? item.ExpirationDate :
                                                        item.ExpirationDateExtended)

您应该能够使用null合并运算符

OrderByDescending(item => item.ExpirationDate ?? item.ExpirationDateExtended)

您应该能够使用null合并运算符

OrderByDescending(item => item.ExpirationDate ?? item.ExpirationDateExtended)