我有一个从可空DateTime对象创建的字符串列表。空字符串表示空条目。所以列表可以像
{ "23.06.2015", "", "01.07.2014", "" }
我想按日期降序排序。空字符串应该在底部
.OrderByDescending(o => o.DateString)
排序错误。我想使用
.OrderByDescending(o => DateTime.Parse(o.DateString))
但是对于空字符串会抛出异常
您可以将日期格式设置为yyyymmdd
而不是dd.mm.yyyy
吗?如果可以,那么在排序时它们将以数字(也包括日期)顺序显示。
一旦排序,您可以将它们转换回原来的dd.mm.yyyy
格式
这对我有用:
var source = new [] { "23.06.2015", "", "01.07.2014", "" };
Func<string, DateTime?> parse = s =>
{
DateTime result;
if (DateTime.TryParseExact(
s,
"dd.MM.yyyy",
System.Globalization.CultureInfo.CurrentCulture,
System.Globalization.DateTimeStyles.AssumeLocal,
out result))
{
return result;
}
return null;
};
var query =
from s in source
orderby parse(s) descending
select s;
我得到的结果是:
"23.06.2015",
"01.07.2014",
"",
"",
当然,你也可以这样做:
var query = source.OrderByDescending(s => parse(s));
您是否能够先将输入排序为Nullable<DateTime>
,然后将它们转换为string
?
var inputDates = new List<DateTime?>() { new DateTime(2015,6,23), null, new DateTime(2014, 07, 1), null };
var sortedDateStrings = inputDates.OrderByDescending(d => d).Select(d => d.HasValue ? d.Value.ToString("dd.MM.yyyy"): string.Empty);