Я думал, что обновлю этот пост, чтобы включить сценарий реального мира. Я хотел такую функцию, так как у меня есть блог, показывающий новости о последних показах фильмов.
Однако я не хочу перечислять скрининг в прошлом (т. Е. Дату скрининга после текущей даты), и, поскольку я хотел показать запись, мне понадобился какой-то идентификатор, переданный для получения записи.
Я оставил, если все просто, чтобы вы могли следить за процессом и, несомненно, сделать его более эффективным с помощью LINQ и др.
Первая модель
public class LatestScreeeningsModel
{
public int Id { get; set; }
public DateTime Date { get; set; }
}
Затем кодовый блок, который вы можете вызвать с вашего контроллера
private static LatestScreeeningsModel GetLatestScreening(IPublishedContent currentNode)
{
LatestScreeeningsModel latestScreening = new LatestScreeeningsModel();
DateTime fileDate;
// get a list of screenings that have not shown yet
var screenings = currentNode.AncestorsOrSelf("siteLanguage")
.FirstOrDefault().Descendants("screening")
.Select(x => new LatestScreeeningsModel() { Id = x.Id, Date = x.GetPropertyValue<DateTime>("date") })
.Where(x => x.Date > DateTime.Now).ToList();
fileDate = DateTime.Today;
long min = Math.Abs(fileDate.Ticks - screenings[0].Date.Ticks);
long diff;
foreach (var comingDate in screenings)
{
diff = Math.Abs(fileDate.Ticks - comingDate.Date.Ticks);
if (diff <= min)
{
min = diff;
latestScreening = comingDate;
}
}
return latestScreening;
}
Я использую Umbraco для получения элементов даты, но он будет работать с любой пользовательской моделью, List et al.
Надеюсь, это поможет