C# / DateTime / как привести к часам

144
29 ноября 2019, 03:40

День добрый! На странице приложения показаны ивенты доступные для регистрации. Данный метод возвращает все активные ивенты. но проблема в том, что, к примеру: есть ивент сегодня в 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);
    }
Answer 1

Разобрался. Я использую startDate.Value.Date и это возвращает именно дату как часть DateTime. Так что удалил .Date как привязку только к числу и сейчас все работает верно.

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);
}
READ ALSO
C#. Почему в Концепции DDD описывают работу с абстрактным репозиторием только в типах AgregationRoot?

C#. Почему в Концепции DDD описывают работу с абстрактным репозиторием только в типах AgregationRoot?

Здравствуйте начитался про DDD и одно из ЖЕСТКИХ требований следования этой концепции это работа с репозиторием только в типах "Корень Агрегации"

142
Вложить несколько элементов из БД в DisplayMember, listbox

Вложить несколько элементов из БД в DisplayMember, listbox

Есть база данный, из неё в listbox, в поле DisplayMember, вывожу из таблицы Agent, значения столбца FirstNameКак можно вывести через пробел значения столбцов...

123
Изменить настройки DataSet

Изменить настройки DataSet

Есть у меня программка на C#, которая тянет данные и пишет в MS SQLДля этого она использует DataSet

129
Работа с двумя SerialPort C# .NET

Работа с двумя SerialPort C# .NET

Задача заключается в следующемНеобходимо работать с двумя COM портами одновременно

110