我想知道如何使用Lambda表达式对具有日期作为字段的列表进行排序。列表应根据特定日期(例如生日)的最近日期(之前)之后进行排序。
如果我们有以下几天:
2015年10月11日
2015年10月13日
2015年10月14日
二○一五年十月一十五日
二○一五年十月一十五日
2015年10月22日
并且出生日期是10/14/2015
日期将按
排序二○一五年十月一十四日
二○一五年十月一十五日
二○一五年十月一十五日
2015年10月13日
2015年10月11日
2015年10月22日
谢谢!
答案 0 :(得分:-2)
您在此处订购的是枢轴(生日)与每个日期之间的距离。像这样:
var sorted = data.OrderBy(date => (birthdate - date).TotalDays);
将按距离排序,但首先将所有放在日期之后,因为TotalDays将为负数,然后是之前日期。为了避免这种情况,我们需要实现一个比较绝对值的自定义IComparer,并在相等的情况下回退到实际值:
public class AbsoluteComparer : IComparer<double>
{
public int Compare(double x, double y)
{
var absX = Math.Abs(x);
var absY = Math.Abs(y);
if (absX > absY)
return 1;
if (absX < absY)
return -1;
// If Absolutes are equal, determine by sign.
if (x > y)
return 1;
if (y > x)
return -1;
return 0;
}
}
所以最后的电话会是:
var sorted = data.OrderBy(date => (birthdate - date).TotalDays, new AbsoluteComparer());