从日期列表中查找最小日期值
Posted
技术标签:
【中文标题】从日期列表中查找最小日期值【英文标题】:Finding the minimum date value from a list of dates 【发布时间】:2019-06-21 18:48:48 【问题描述】:这将为我提供我的开始日期列表:(它们存储为 STRING)
var startDate = myValues.Select(t => t.StartDate).ToList();
我只需要它从中选择最早的日期值。如果它是一个空字符串,那么这也是赢家,如果没有空字符串,那么只看哪个是真正最早的。
有没有办法我可以使用LINQ
和结合这部分和我上面的部分来一次找到它?而不是单独编写更多逻辑来从该列表中找到最小日期?
【问题讨论】:
如果您知道它们可以解析为DateTime
,您可以使用静态Parse
方法将每个项目转换为DateTime
,然后选择Min
值:@987654327 @
我认为 DateTime.Parse 不适用于空字符串?您可能必须将自定义比较器传递给 Min 方法,该方法检查字符串是否为空/空,否则它调用 DateTime.Parse 方法
新的 DateTime 将给出最小日期 (1/1/01)。所以请尝试以下操作: DateTime startDate = myValues.Select(t => (t.StartDate == string.Empty) ? new DateTime() : DateTime.Parse(t.StartDate)).Min(t => t.StartDate);
如果值不为空或不是有效的DateTime
对象怎么办?你只是想选择第一个,返回null,还是抛出异常(或其他)?
【参考方案1】:
类似:
string winner = myValues.Select(t => t.StartDate)
.Select(s => new str = s, date = DateTime.TryParse(s, out DateTime dt) ? dt : new DateTime?() )
.OrderByDescending(x => String.IsNullOrEmpty(x.str))
.ThenByDescending(x => x.date.HasValue)
.ThenBy(x => x.date.GetValueOrDefault())
.Select(x => x.str)
.First();
【讨论】:
如果字符串为空或有效字符串,那么简单的 Min.StartDate
...TryParse
将string
作为第一个参数(IsNullOrEmpty
也是如此),而Select
应该选择string
。
@RufusL 你是对的 :) 当然他需要先选择 SartDate 属性【参考方案2】:
这可能对你有帮助
var result = myValues?.Where(t=>!string.IsNullOrEmpty(t.StartDate))?.
Select(t => DateTime.TryParse(t.StartDate, out DateTime date); return date;)?.
Min();
【讨论】:
以上是关于从日期列表中查找最小日期值的主要内容,如果未能解决你的问题,请参考以下文章
在 Excel 中查找符合条件的数据,查找最小日期,返回第三个值