Linq, где пункт с несколькими условиями и пустой проверкой

Я пытаюсь проверить, является ли дата пустой в linq и если это не проверка, это - будущая дата.

QuestionnaireRepo.FindAll(q => !q.ExpiredDate.HasValue || q.ExpiredDate >DateTime.Now).OrderByDescending(order => order.CreatedDate);

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

КАКИЕ-ЛИБО идеи? Существует много подобных вопросов на здесь, но не, которые дают ответ, я очень плохо знаком с Linq как Вы май предполагаемых :)

Править: Я получаю результаты, которых я требую теперь, но это будет проверять> условное выражение на нулевых значениях в некоторых случаях. Разве это не плохая вещь?

7
задан Andrew 17 March 2010 в 16:55
поделиться

3 ответа

Разве это не сработает?

QuestionnaireRepo.FindAll(
    q => (q.ExpiredDate == null) || (q.ExpiredDate > DateTime.Now));
8
ответ дан 6 December 2019 в 23:04
поделиться

Есть несколько способов сделать это, один хороший способ - использовать конвейеры и фильтры, но, глядя на то, как вы реализуете вышеуказанное, это не похоже на вас Вы используете этот шаблон, поэтому не буду вдаваться в подробности, но его стоит погуглить.

С шаблоном каналов и фильтров вы можете сделать следующее:

        public static IQueryable<YourType> WithExpiryDate(this IQueryable<YourType> allMyTypes)
        {
            return allMyTypes.Where(f => f.ExpiredDate != null);
        }

        public static IQueryable<YourType> WhereExpiredDateBeforeThanNow(this IQueryable<YourType> allMyTypes)
        {
            return allMyTypes.Where(f => f.ExpiredDate <= DateTime.Now);
        }

А затем просто введите: QuestionnaireRepo.FindAll (). WithExpiryDate (). WhereExpiredDateBeforeThanNow (). SingleOrDefault ();

Вы также можете просто сказать :

QuestionnaireRepo.FindAll(q => q.ExpiredDate != null && q.ExpiredDate <= DateTime.Now);

Надеюсь, это поможет ...

1
ответ дан 6 December 2019 в 23:04
поделиться

Если это Linq-to-Sql или Linq-To-Entities, то HasValue не преобразуется в выражение SQL, и вы получите исключение.

Это должно сработать.

QuestionnaireRepo.FindAll(q => q.ExpiredDate != null && q.ExpiredDate <= DateTime.Now)
2
ответ дан 6 December 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: