繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM