按一个属性排序集合,如果为空,按不同属性排序

时间:2014-06-05 20:18:53

标签: c# linq sorting

我有一个自定义对象的类型集合,它有两个DateTime? properties,ExpirationDate和ExpirationDateExtended。我想根据这些属性从这个集合中获取最新信息。通常,使用一个属性,我只使用OrderByDescending方法并获取第一个属性。这在下面说明。

但是,我想要做的是,如果ExpirationDate属性具有值(不为null),则由ExpirationDate属性排序(OrderByDescending),但是如果它没有值(null),则排序(OrderByDescending) )由ExpirationDateExtended属性。

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

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

3 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

var latestExpirationDate = myCollection
    .OrderByDescending(item => item.ExpirationDate ?? ExpirationDateExtended)
    .FirstOrDefault();
相关问题