c#datetime list按日期相对于当前日期排序

时间:2013-03-28 11:35:34

标签: c# asp.net linq list datetime

我在C#网页中有一个事件列表,其中包含属性

  1. 日期(DateTime
  2. 和说明(string)。
  3. 我想使用LINQ按日期对此列表进行排序,但是我希望在列表中的第一个最近的日期(到当前日期)和最后一个最远的日期进行排序。

    例如,如果日期是1月1日,列表中的第一个将是1月1日,列表中的最后一个将是12月31日。
    日和月是相关的,但年不是。

    我已经研究了这个,但我不确定从哪里开始。
    任何帮助都会非常感激。

    感谢所有答案,对不起,我的问题很模糊。我试图在日期上生成事件列表,列表顶部的最近日期 - 例如生日列表 - 下一个即将到来的生日在顶部,最后一个即将到来的生日在结束时。我确信我的代码可以拆开,因为我不是专业人士 - 但这就是我需要的。

    这就是我最后回答的问题:

    我为事件创建了一个类:

      public class Events
    {
    public int ContactId { get; set; }
    public string Lastname { get; set; }
    public string Firstname { get; set; }
    public DateTime EventDate { get; set; }
    public string Description { get; set; }
    public DateTime Now { get; set; }
    public bool Reminder { get; set; }
    public TimeSpan Difference { get; set; }
    public int SortValue { get; set; }
    
    
    public Events(int contactId, DateTime date, string lastname, string firstname, string description, bool reminder)
    {
    
        ContactId = contactId;
        EventDate = date;
        Description = description;
        Reminder = reminder;
        Now = DateTime.Now;
        Lastname = lastname;
        Firstname = firstname;
    
        Difference = EventDate - Now;
        SortValue = Convert.ToInt32(Difference.Days % 365);
        if (SortValue < 0) { SortValue += 365; }
    
    
    }
    

    }

    然后我在我的代码中使用了以下内容:

       var upcomingEvents = new List<Events>();
    
    foreach (var eventt in db.Query("SELECT CONTACT_ID, LASTNAME, FIRSTNAME, DATE, DESCRIPTION, REMINDER  FROM CONTACTS INNER JOIN EVENTS ON CONTACTS.ID = EVENTS.CONTACT_ID WHERE CONTACTS.CUSTOMER_ID = @0", WebSecurity.CurrentUserId)){
        var newEvent = new Events(eventt.CONTACT_ID, eventt.DATE, eventt.LASTNAME, eventt.FIRSTNAME, eventt.DESCRIPTION, eventt.REMINDER);
        upcomingEvents.Add(newEvent);   
    }
    upcomingEvents = upcomingEvents.OrderBy(x => x.SortValue).ThenBy(x=>x.Lastname).ToList();
    

2 个答案:

答案 0 :(得分:0)

试试这个:

YourOrderedList = YourList.OrderBy(x => DateTime.Now.Subtract(new DateTime(DateTime.Now.Year, x.Month , x.Day)).TotalSeconds);

此解决方案假定您要按日期与当前系统日期的线性绝对距离对日期列表进行排序。

答案 1 :(得分:0)

如果没有描述如何唯一地处理过去日期(在“相对”日期之前)的情况,听起来你只需要按日期排序。我认为你这对自己来说太难了。