Я пытаюсь смоделировать:
ГДЕ x.IsActive = true ИЛИ x.Id = 5
Следующее вызывает использование «И» ... как мне имитировать условие «ИЛИ» с IQueryable (qry) и моим обнуляемым int, учитывая, что здесь может быть задействована другая фильтрация, как с фильтром IsActive? *
if (onlyActiveItems) //bool
{
qry = qry.Where(x => x.IsActive == true);
}
if (whenSpecifiedMustIncludeRecordWithThisId.HasValue) //int?
{
qry = qry.Where(x => x.Id == whenSpecifiedMustIncludeRecordWithThisId.Value);
}
Я рассмотрел союз, но, похоже, ответ на этот вопрос должен быть намного проще.
Это одно решение, которое позволяет обойти проблему, с которой я сталкиваюсь, когда «объект Nullable должен иметь значение» при попытке объединить все в одном ответе. Что является причиной того, что значение nullable будет оценено, если оно равно null, в противном случае?
if (whenSpecifiedMustIncludeRecordWithThisId.HasValue)
{
qry = qry.Where(x => (!onlyActiveItems || (onlyActiveItems && x.IsActive)) || x.Id == whenSpecifiedMustIncludeRecordWithThisId.Value);
}
else
{
qry = qry.Where(x => (!onlyActiveItems || (onlyActiveItems && x.IsActive)));
}
Кажется также, что в некоторых случаях использование свойства .Value для Nullable имеет значение, как видно из другого моего вопроса здесь Linq to SQL Int16 преобразуется в Int32 в команде SQL