Сконцентрировав нашу беседу в ответ, вы заявили, что у вас возникла проблема с этой строкой кода:
var catalogs = supplies.Where(s => s.OnHand.HasValue < (searchString ?? string.Empty));
Здесь есть несколько проблем.Во-первых, HasValue
возвращает bool
, поэтому мы не можем сделать сравнение <
с ним.Вместо этого, если HasValue
равно true
, то мы хотим выполнить сравнение для свойства Value
:
var catalogs = supplies.Where(s => s.OnHand.HasValue && s.OnHand.Value < searchValue)
Однако нам нужно использовать int
вместо searchValue
выше, и в исходном коде вы используете строку.Таким образом, нам нужно преобразовать строку в int
, и самый безопасный способ сделать это - int.TryParse
, который возвращает bool
, указывающий на успех, и который устанавливает параметр out
в преобразованное значение в случае успеха.
Так как вы сказали, что если строка null
, мы должны вернуть все значения, тогда мы должны создать значение из строки, где, если это null
, это будет максимальное значение.Таким образом, мы можем сделать что-то вроде этого:
int searchValue;
// If searchString is null (or not an int), then set our searchValue to int.MaxValue
if (!int.TryParse(searchString, out searchValue)) searchValue = int.MaxValue;
Теперь мы можем использовать это searchValue
для фильтрации нашего запроса:
var catalogs = supplies.Where(s => s.OnHand.HasValue && s.OnHand.Value <= searchValue)