C# LINQ лямбда-выражение с Содержит в качестве параметра метода - PullRequest
0 голосов
/ 16 апреля 2020

Я пишу метод, который получает лямбда-выражение в качестве параметра, который будет использоваться для фильтрации 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 и, следовательно, выдает ошибку , Может кто-нибудь объяснить, как правильно определить и использовать эту функцию для обработки такого случая?

1 Ответ

0 голосов
/ 16 апреля 2020

Хорошо, попробуйте вместо этого создать общее расширение c, выражение должно отслеживать все другие данные в выражении. Попробуйте создать предикат в виде выражения

private void FilterCollectionUsingPredicate(Expression<Func<SomeModel, bool>> predicate)
{
   _collection = _collection.Where(predicate).ToList();
}

. Оно должно работать.

...