我试图找出为什么我的委托(delegate)函数不起作用,任何帮助将不胜感激,这可能是一个小问题,但我已经研究了一段时间并且无法弄清楚,我的代码:
//remove all matching people from this list
public void RemovePeopleFromLookup(Predicate<PeopleDTO> _people)
{
//Lookup is an internal readonly ICollection of PeopleDTO
Lookup.RemoveAll(_people);
}
//调用方法如下: //data是PeopleDTO的集合
mylookupobj.RemovePeopleFromLookup(x => data.Any(y => y.Name == x.Name && x.Type == FieldElement.Strange));
出于某种原因,所有人员都会从此查找中删除,这是不正确的,我只想删除那些人
- 奇怪
- 不存在于数据集合中的人员
编辑:
数据集合可以是不同类型的对象 -> 奇怪的、嘈杂的等等...... mylookupobj.Lookup 数据集合与数据集合类似,并且包含多种类型,因此我以这种方式编写查询
EDIT2:我错过了这个可能非常重要的信息......
public class PersonDTO
{
//Name
//Type
//Age
//Desc
}
在 mylookupobj.Lookup 内部 - 所有属性都包含数据,但是在数据集合内部仅存在名称 + 类型。
最佳答案
一个更简单、更有效的谓词是:
x => (x.Type == FieldElement.Strange) && data.Any(y => y.Name == x.Name)
但我承认我不认为这两者有什么主要问题。
编辑:似乎其中一个条件必须颠倒。
x => (x.Type == FieldElement.Strange) && ! data.Any(y => y.Name == x.Name)
关于c# - linq谓词从集合中删除对象问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6137546/