在DateTime中替换null ?[] with DateTime.MaxValue使用LINQ

本文关键字:DateTime with MaxValue LINQ 使用 替换 null | 更新日期: 2023-09-27 18:15:47

如何将日期为null的所有DateTime?替换为DateTime.MaxValue ?

I have try:

Array.ConvertAll(myDateTimeArray, a => a = a.HasValue ? a : DateTime.MaxValue);

也:

myDateTimeArray.Where(a => a == null).ToList().ForEach(a => a = DateTime.MaxValue);

之后,我想做这样的事情:

DateTime minDate = myDateTimeArray.Min(a => a.Value);

,但我得到一个InvalidOperationException,因为a.Valuenull

在DateTime中替换null ?[] with DateTime.MaxValue使用LINQ

你可以这样做:

myDateTimeArray = myDateTimeArray.Select(dt => dt ?? DateTime.MaxValue).ToArray();

这将替换整个数组,而不是它的单个元素。如果您需要替换单个元素,请使用for循环。

使用Enumerable将日期投影到一个新的数组中。选择:

var newArray = myDateTimeArray.Select(x => x ?? DateTime.MaxValue).ToArray();

空合并操作符(??)如果左操作数不为空,则返回左操作数,否则返回右操作数。

可枚举对象。最小方法没有重载,它接受DateTime(或DateTime?)值的集合。你可以使用Enumerable。实现自己的Min方法的聚合方法:

DateTime? result = myDateTimeArray.Where(x => x != null)
                                  .DefaultIfEmpty(null)
                                  .Aggregate((x, y) => x < y ? x : y);

如果myDateTimeArray为空或myDateTimeArray中的所有元素都为null,则返回null,否则返回myDateTimeArrayDateTime的最小值。