我正在试图弄清楚为什么我的委托函数不起作用,如果有任何帮助,我们将不胜感激,这可能是一个小问题,但我已经研究了一段时间,我的代码:
//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));
出于某种原因,所有人都被从这个查找中删除,这是不正确的,我只想删除的人
- 奇怪
- DONOT存在于数据集合中
编辑:
数据集合可以是不同类型的对象->奇怪、嘈杂等。。。mylookupobj.Lookup数据集合类似于数据集合,包含多种类型,因此我以这种方式编写查询
第二版:我错过了这个可能非常重要的信息。。。
public class PersonDTO
{
//Name
//Type
//Age
//Desc
}
在mylookupobj内部。查找-所有属性都包含数据,但是在数据集合中只存在名称+类型。
一个更简单、更高效的谓词是:
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);