我有一个 C# 网页中的事件列表,其中包括属性
- 日期 (
DateTime
) - 和说明 (
string
)。
我想使用 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();