linq谓词从收集问题中删除对象

问题描述

| 我试图弄清楚为什么我的委托函数不起作用,任何帮助将不胜感激,这可能是一个小问题,但是我已经花了一段时间研究并且不知道它是什么,我的代码
//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);
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...