Если вас интересуют события, которые находятся ближе всего к дню, вы можете сделать это:
DateTime today = DateTime.Now;
var events = context.Events
.OrderBy(e => Math.Abs((today - e.DueDate).Days))
.Take(5)
.ToList();
Для этого используются события, которые находятся наименьшее количество дней от сегодняшнего дня (в прошлом ИЛИ в будущем).
Если вы хотите, чтобы события, которые были самыми последними, но только в будущем, вы могли бы сделать:
DateTime today = DateTime.Now;
var events = context.Events
.Where(e => e.DueDate >= today)
.OrderBy(e => (e.DueDate - today).Days)
.Take(5)
.ToList();
Редактировать:
Если выиспользовать LINQ to Entities DateTime
манипуляции не поддерживаются напрямую, но если вы используете SQL-сервер, то что-то вроде DateDiff должно работать (не проверено, вы должны попробовать сами):
DateTime today = DateTime.Now;
var events = context.Events
.Where(e => e.DueDate >= today)
.OrderBy(e => System.Data.Objects.SqlClient.SqlFunctions.DateDiff("d", e.DueDate, today))
.Take(5)
.ToList();
Если это не сработает, вы всегда можете сначала получить свои данные, а затем отфильтровать с помощью LINQ объектов, что дает дополнительные преимущества, заключающиеся в том, что вы не привязываете себя к SQL Server, но, очевидно, это не очень эффективно:
DateTime today = DateTime.Now;
var futureEvents = context.Events
.Where(e => e.DueDate >= today);
.ToList();
var filteredEvent = futureEvents
.OrderBy(e => (e.DueDate - today).Days)
.Take(5)
.ToList();