Я согласен с тем, что проблема заключается не в захвате переменной foreach
, но есть более глубокая проблема, которая заключается в сочетании LINQ с императивными структурами потоков управления - то есть, во-первых, смешиванием LINQ & foreach
.
Попробуйте вместо этого:
var predicates =
from fieldName in FilterKeys
where conditions.ContainsKey(fieldName)
let param = conditions[fieldName]
where param.IsNotNullOrEmpty()
select (Func<BaseEntity, bool>)
(d => fieldName != null
&& d.GetFieldValue(fieldName).ContainsIgnoreCase(param));
var result = predicates.Aggregate(
SourceCollection as IEnumerable<BaseEntity>,
(xs, p) => xs.Where(p));
Нет необходимости в цикле foreach
, и код остается чисто в LINQ.Друзья не должны позволять друзьям смешивать императив и функциональность ...: -)