Два промежутка между датами (доступна ли дата в этот период?)

#c# #linq

#c# #linq

Вопрос:

У меня есть проект, который основан на исследовании даты между двумя периодами.

Все идет хорошо, за исключением трех случаев.

Первый случай: если конец периода не указан в базе данных .

Второй случай: если дата окончания периода не указана в поиске .

Третий случай: если период не имеет конца, и поиск не указал дату окончания для периода.

Пример: В базе данных период с: (2020-09-25) не имеет конца:

![введите описание изображения здесь В окне поиска периодов мы оставляем дату окончания периода пустой введите описание изображения здесь

Я использовал этот код, чтобы обойти проблему, но этот код непрактичен и может вызвать проблемы в будущем, поскольку я добавляю 100 лет к дате начала бесконечного периода.

     List<Tax_Value> g = (
        from i in Tax.Tax_Value
        .Where
        (L => 
        L.End_Date.HasValue?
            L.End_Date >= this.Start_Date.ToDate : this.Start_Date.ToDate.Value.AddYears(100) >=  this.Start_Date.ToDate
        amp; 
        this.End_Date.ToDate.HasValue ? 
            L.Start_Date <= this.End_Date.ToDate : L.Start_Date <= this.Start_Date.ToDate.Value.AddYears(100))
        select i).ToList();
  

Обновить :
Есть некоторые даты, которые выдают ошибки, например:
Начало периода меньше даты начала поиска для периода, поэтому период не отображается.
Поиск заключается в извлечении всех периодов между двумя датами, отмечая, что у некоторых периодов дата начала меньше даты начала поиска для периода

введите описание изображения здесь

Ответ №1:

Вы можете заменить 100 лет на true

 List<Tax_Value> g = (
    from i in Tax.Tax_Value
        .Where(L => 
            (L.End_Date.HasValue amp;amp; this.End_Date.ToDate.HasValue ?
                L.End_Date <= this.End_Date.ToDate : true)
            amp;amp;
            (L.Start_Date.HasValue amp;amp; this.Start_Date.ToDate.HasValue ?
                L.Start_Date >= this.Start_Date.ToDate : true)
            amp;amp;
            (L.End_Date.HasValue amp;amp; this.Start_Date.ToDate.HasValue ?
                L.End_Date > this.Start_Date.ToDate : true)
            amp;amp;
            (L.Start_Date.HasValue amp;amp; this.End_Date.ToDate.HasValue ?
                L.Start_Date < this.End_Date.ToDate : true)
        select i).ToList();
  

Также узнайте разницу между amp; и amp;amp; .

Комментарии:

1. Спасибо, брат, за твое внимание, но есть проблема, когда в области поиска появляются точки.

2. @EbrahemAlabdaly какой-нибудь пример?