Я пытаюсь проверить, является ли дата пустой в linq и если это не проверка, это - будущая дата.
QuestionnaireRepo.FindAll(q => !q.ExpiredDate.HasValue || q.ExpiredDate >DateTime.Now).OrderByDescending(order => order.CreatedDate);
Мне нужна вторая проверка, чтобы только применяться, если первое верно. Я использую шаблон единого репозитория и FindAll, принятый где пункт
КАКИЕ-ЛИБО идеи? Существует много подобных вопросов на здесь, но не, которые дают ответ, я очень плохо знаком с Linq как Вы май предполагаемых :)
Править: Я получаю результаты, которых я требую теперь, но это будет проверять> условное выражение на нулевых значениях в некоторых случаях. Разве это не плохая вещь?
Разве это не сработает?
QuestionnaireRepo.FindAll(
q => (q.ExpiredDate == null) || (q.ExpiredDate > DateTime.Now));
Есть несколько способов сделать это, один хороший способ - использовать конвейеры и фильтры, но, глядя на то, как вы реализуете вышеуказанное, это не похоже на вас Вы используете этот шаблон, поэтому не буду вдаваться в подробности, но его стоит погуглить.
С шаблоном каналов и фильтров вы можете сделать следующее:
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);
Надеюсь, это поможет ...
Если это Linq-to-Sql или Linq-To-Entities, то HasValue не преобразуется в выражение SQL, и вы получите исключение.
Это должно сработать.
QuestionnaireRepo.FindAll(q => q.ExpiredDate != null && q.ExpiredDate <= DateTime.Now)