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));

出于某种原因,所有人都被从这个查找中删除,这是不正确的,我只想删除的人

  1. 奇怪
  2. 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);

相关内容

  • 没有找到相关文章

最新更新