我有一组这样的日期时间:
IEnumerable<DateTime?> dates
我希望通过降序
来收集不同的日期排序 IEnumerable<DateTime> dtCollection = dates.Where(x => x.HasValue).Distinct().OrderByDescending(x => x).AsEnumerable();
在上面的代码中,我得到了无效强制转换的异常,并且distinct返回distinct(日期+时间)而不是不同的日期。
所以:
Where(x => x.HasValue)
没有丢弃所有空值谢谢,
答案 0 :(得分:1)
在查询中,通过选择值来将DateTime?
个对象转换为DateTime
:
IEnumerable<DateTime> dtCollection = dates
.Where(x => x.HasValue)
.Select(x => x.Value)
.Distinct()
.OrderByDescending(x => x)
.AsEnumerable();
由于Where()
子句仅过滤那些具有值的子句,因此Select()
子句应该成功而不会出错。那个Select()
的输出是DateTime
而不是DateTime?
的集合。
相反,要仅选择DateTime
的一个属性,请更新该子句:
.Select(x => x.Value.Date)
答案 1 :(得分:1)
您可以使用.Date来获取DateTime的日期组件:
dates
.Where(x => x.HasValue)
.Select(x => x.Value.Date)
.Distinct()
.OrderByDescending(x => x)
在回答您的第一点时,Where(x => x.HasValue)
会丢弃您所期望的所有空值,但您仍然会留下{{{{ 1}}而不是DateTime?
,当您尝试将其分配给DateTime
时导致类型转换错误,因此您需要使用IEnumerable<DateTime> dtCollection
将每个x.Value
转换为DateTime?
。