C # / DateTime / - PullRequest
       5

C # / DateTime /

0 голосов
/ 14 марта 2019

На моей странице приложений есть много событий, доступных для регистрации.Этот метод возвращает все активные события.но есть проблема, например, есть событие сегодня в 11 часов утра.после 11 часов утра он не должен показываться логически, но показывается как активный.И это не скрывается до полуночи.Таким образом, он становится неактивным при изменении даты (т. Е. В конце периода не учитываются часы) ... Каков наилучший способ изменить DateTime, чтобы событие стало неактивным по истечении заданного часа, а нена следующий день?

public IPagedList<Domain.Event> SearchEventsPublic(long[] eventCategoryTypeIds = null,
                                          long[] locationIds = null,
                                          DateTime? startDate = null,
                                          DateTime? endDate = null,
                                          int pageIndex = 0,
                                          int pageSize = int.MaxValue)
    {
        var query = _eventRepository.Table;
        // get event by filter
        if (eventCategoryTypeIds != null && eventCategoryTypeIds.Length > 0)
            query = query.Where(c => eventCategoryTypeIds.Contains(c.EventCategoryId));

        if (locationIds != null && locationIds.Length > 0)
            query = query.Where(c => locationIds.Contains(c.LocationId));

        var minDate = DateTime.Now;
        if (startDate.HasValue && startDate.Value > minDate)
        {
            minDate = startDate.Value.Date;
        }
        query = query.Where(c => c.StartDateTime >= minDate ||
                                (c.PrePurchase && (c.ParentId == null || c.ParentId == 0)));

        if (endDate.HasValue)
        {
            var maxDate = endDate.Value.Date.AddDays(1).AddTicks(-1);
            query = query.Where(c => c.StartDateTime <= maxDate ||
                                (c.PrePurchase && (c.ParentId == null || c.ParentId == 0)));
        }

        query = query.OrderBy(c => c.PrePurchase ? 0 : 1).ThenBy(c => c.StartDateTime);
        return new PagedList<Domain.Event>(query.AsQueryable(), pageIndex, pageSize);
    }

1 Ответ

1 голос
/ 14 марта 2019

Вы используете startDate.Value.Date, поэтому он обязательно вернет часть даты DateTime. Если вы также хотите сравнить временную часть, сравните полную DateTime. Для endDate endDate.Value.Date.AddDays(1).AddTicks(-1); он также вернет часть даты. Вам также нужно сравнить полный endDate.

public IPagedList<Domain.Event> SearchEventsPublic(long[] eventCategoryTypeIds = null,
                                  long[] locationIds = null,
                                  DateTime? startDate = null,
                                  DateTime? endDate = null,
                                  int pageIndex = 0,
                                  int pageSize = int.MaxValue)
{
    var query = _eventRepository.Table;
    // get event by filter
    if (eventCategoryTypeIds != null && eventCategoryTypeIds.Length > 0)
        query = query.Where(c => eventCategoryTypeIds.Contains(c.EventCategoryId));

    if (locationIds != null && locationIds.Length > 0)
        query = query.Where(c => locationIds.Contains(c.LocationId));

    var minDate = DateTime.Now;
    if (startDate.HasValue && startDate.Value > minDate)
    {
        minDate = startDate.Value;
    }
    query = query.Where(c => c.StartDateTime >= minDate ||
                        (c.PrePurchase && (c.ParentId == null || c.ParentId == 0)));

    if (endDate.HasValue)
    {
        var maxDate = endDate.Value.AddDays(1).AddTicks(-1);
        query = query.Where(c => c.StartDateTime <= maxDate ||
                        (c.PrePurchase && (c.ParentId == null || c.ParentId == 0)));
    }

    query = query.OrderBy(c => c.PrePurchase ? 0 : 1).ThenBy(c => c.StartDateTime);
return new PagedList<Domain.Event>(query.AsQueryable(), pageIndex, pageSize);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...