[包含作为方法参数的C#LINQ lambda表达式

问题描述 投票:-2回答:1

我正在编写一个将lambda表达式作为参数用于过滤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,因此会引发错误。有人可以解释如何正确定义和使用此功能来处理这种情况吗?

c# linq lambda contains func
1个回答
0
投票

尝试创建通用扩展,而Expression应该跟踪表达式中的所有其他数据。尝试将谓词创建为Expression

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

它应该起作用。

© www.soinside.com 2019 - 2024. All rights reserved.