【问题标题】:Sort Collection By One Property, If Null, Sort By Different Property按一个属性对集合进行排序,如果为空,则按不同的属性排序
【发布时间】:2014-06-06 04:21:08
【问题描述】:

我有一个自定义对象的类型化集合,它有两个 DateTime?属性,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();

【问题讨论】:

    标签: c# linq sorting


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:
        var latestExpirationDate = myCollection
            .OrderByDescending(item => item.ExpirationDate ?? ExpirationDateExtended)
            .FirstOrDefault();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-19
          • 2016-05-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-14
          相关资源
          最近更新 更多