Я пишу метод, который получает лямбда-выражение в качестве параметра, который будет использоваться для фильтрации IList<SomeModel> _collection
.
public void DoSomething(SomeModel model)
{
FilterCollectionUsingPredicate(x => x.Name.Equals(model.Name));
}
private void FilterCollectionUsingPredicate(Func<SomeModel, bool> predicate)
{
_collection = _collection.Where(predicate).ToList();
}
. Он хорошо работает, когда параметр predicate
представляет собой простое выражение, например x => x.Name.Equals(model.Name)
. Однако он становится сложным, когда ему приходится использовать какую-то другую (локальную) коллекцию и предложение Contains
.
public void DoSomething(SomeModel model)
{
IEnumerable<string> someOtherCollection = model.SomeOtherCollection;
FilterCollectionUsingPredicate(x => someOtherCollection.Contains(x.Phone));
}
private void FilterCollectionUsingPredicate(Func<SomeModel, bool> predicate)
{
_collection = _collection.Where(predicate).ToList();
}
Конечно, метод FilterCollectionUsingPredicate
не видит someOtherCollection
и, следовательно, выдает ошибку , Может кто-нибудь объяснить, как правильно определить и использовать эту функцию для обработки такого случая?