Разве finalPredicate не должен начинаться как False? Это всегда будет иметь значение true.
РЕДАКТИРОВАТЬ:
Посмотрев на код исключения, который вы разместили, я думаю, вы могли бы подумать об этом ОЧЕНЬ примерно как:
(псевдокод)
finalPredicate =
true ||
(true &&
p.ef.Contains(item.FilterDomain) &&
p.fname.Contains(item.ff) &&
p.subject.Contains(item.fs)
)
Обратите внимание, что это НЕ то, что означает на самом деле ; вы строите дерево выражений, которое отличается от классического императивного C # (так что это редактирование, вероятно, требует от голосов). Но вам, возможно, будет легче думать об этом таким образом.
Итак, у вас есть как минимум две проблемы:
- То, на что я и другие указывали, было первым
true || ...
. Истинное значение || что-нибудь всегда даст Истину. Поэтому, если вы инициализируете finalPredicate
Истиной, все это будет Истиной, несмотря ни на что. Фактически, ваши другие выражения могут даже не оцениваться , поэтому вы видите это исключение только при инициализации finalPredicate
в False. Это единственный раз, когда ваш код получает удар.
- Возможно, у вас есть ошибка где-то в цикле
for
, и я предполагаю, что это связано с этими вызовами Contains
. Однако, не зная о вашей ситуации или задействованных данных, трудно сказать что-то большее.
Надеюсь, это поможет.