问题描述
|
我试图弄清楚为什么我的委托函数不起作用,任何帮助将不胜感激,这可能是一个小问题,但是我已经花了一段时间研究并且不知道它是什么,我的代码:
//remove all matching people from this list
public void RemovePeopleFromLookup(Predicate<PeopleDTO> _people)
{
//Lookup is an internal readonly ICollection of PeopleDTO
Lookup.RemoveAll(_people);
}
//调用如下方法:
//数据是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内部-所有属性都包含数据,但是在数据集合内部仅存在Name + Type。
解决方法
一个更简单,更有效的谓词是:
x => (x.Type == FieldElement.Strange) && data.Any(y => y.Name == x.Name)
但我承认我都没有看到任何主要问题。
编辑:似乎条件之一必须倒转。
x => (x.Type == FieldElement.Strange) && ! data.Any(y => y.Name == x.Name)
,调用Any就是问题所在。本质上,它在整个集合中运行了多次。即,如果集合中的任何对象符合条件,请删除该项目。尝试这个:
mylookupobj.RemoveFieldFromLookup(y => y.Name == x.Name && x.Type == FieldElement.Strange);
,请尝试这个。
mylookupobj.RemovePeopleFromLookup(x => data.Contains(y => y.Name == x.Name)
&& x.Type == FieldElement.Strange);