Мой проект работал отлично, пока мне не пришлось учитывать массив строк, а не один... Я не знаю, как это исправить. Country
является свойством текущего класса, в котором этот метод находится. Он был единственной строкой, но теперь это массив.
Первоначально это выглядело так:
private Expression<Func<Payment, bool>> CountryMatches()
{
if (Country.Length < 1) return Skip;
return payment => payment.Country.ToLower().Contains(Country.ToLower());
}
Я не могу понять, как настроить его так, чтобы, если ЛЮБОЙ из строк в Country
соответствовал payment.Country
Country
... и, конечно же, это возвращает выражение... Это мое лучшее предположение (но, очевидно, не правильно), как делать то, что мне нужно сделать:
private Expression<Func<Payment, bool>> CountryMatches()
{
if (Country.Length < 1) return Skip;
return payment => payment.Country.ToLower() == Country.Any().ToLower();
}
Вы хотите проверить все содержимое Country
против payment.Country
Country
, например:
return payment => Country.Any(
c => payment.Country.ToLower().Contains(c.ToLower()));
Тем не менее, это довольно плохой способ проверить, является ли одна строка подстрокой другого, главным образом потому, что она делает много ненужной работы путем преобразования в строчные буквы снова и снова. Вот лучший способ сделать это:
return payment => Country.Any(
c => payment.Country.IndexOf(c, StringComparison.OrdinalIgnoreCase) >= 0);
.Any принимает лямбда в, который может выполнить ваше сравнение. Вышеприведенный код предполагает, что он возвращает некоторый объект, который приравнивается к true при сравнении, но Any возвращает простой bool. Таким образом, попробуйте
return payment =>
Country.Any(c =>
string..Equals(payment.Country, c, StringComparison.InvariantCultureIgnoreCase));
Также обратите внимание, что .Equals часто предпочтительнее для оператора "==", особенно со строками, если вы можете передать параметр StringComparison.
ToLower
что первый вариант связан с ненужным созданием строк из-за обращений кToLower
. Второй вариант лучше, если он хороший, а первый - плохой.