[英]C# LINQ lambda expression with Contains as a method parameter
我正在编写一种方法,该方法获取 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
,因此会引发错误。 有人可以解释如何正确定义和使用这个 function 来处理这种情况吗?
好吧,尝试创建一个通用扩展,Expression 应该跟踪表达式中的所有其他数据。 尝试将谓词创建为表达式
private void FilterCollectionUsingPredicate(Expression<Func<SomeModel, bool>> predicate)
{
_collection = _collection.Where(predicate).ToList();
}
它应该工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.