从最早到最晚排序

时间:2013-08-10 21:37:32

标签: c# datetime

如何循环每个月的第一次约会。

public struct stat{
public DateTime date;
}

我有一个List<stat>,它有一个日期属性。我希望通过排序获得最低和最新的。第一个元素是旧元素,最后一个元素是较新元素。

我可以轻松地按顺序获得第一个和第二个。

我想要的是获得第一个(最早的)和最新的每个月的第一个日期。

string ret =“”;

    List<DateTime> dates = new List<DateTime>();

    int breaker = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);

    stats = stats.OrderBy(x => x.Date).ToList();
    DateTime old = stats.First().Date;
    DateTime @new = stats.Last().Date;

    int diffdays = @new.Subtract(old).Days;

    DateTime loopd = DateTime.Now;

    for (int i = 0; i < diffdays; i = i + breaker)
    {
        loopd = loopd.AddDays(-breaker);
        dates.Add(loopd);
        if (loopd < old)
            Console.WriteLine("date" + old);
    }

    for (int j = 0; j < dates.Count; j++)
    {
        if (j == 0)
        {
            DateTime ld= dates[0];
            stats.SelectMany(x => x.Date < @new && x.Date > dates[j]);
        }
    }

2 个答案:

答案 0 :(得分:1)

  

我希望通过排序

获得最低和最新的

我认为最低意味着最早。

stat oldest = stats.OrderBy(s => s.date).FirstOrDefault();
stat newest = stats.OrderByDescending(s => s.date).FirstOrDefault();

您也可以使用

stats.OrderBy(s => s.date).LastOrDefault();

获得最新版本。

答案 1 :(得分:0)

你可以使用这样的东西:

List<stat> statList = new List<stat>();
...
var selectedItem = statList
                   .OrderBy(item => item.date)
                   .Select(l => l.last());

或者您可以使用OrderByDecending()代替