c# - linq谓词从集合中删除对象问题

标签 c# linq

我试图找出为什么我的委托(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));

出于某种原因,所有人员都会从此查找中删除,这是不正确的,我只想删除那些人

  1. 奇怪
  2. 存在于数据集合中的人员

编辑:

数据集合可以是不同类型的对象 -> 奇怪的、嘈杂的等等...... 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/

相关文章:

C# 十进制(字符串类型)在最后一个字符处四舍五入

c# - 使用 (Try)Parse 将空字符串加倍

c# - 为什么这个对象为空?

c# - LINQ 序列 - 它们如何链接到 IL 中?

c# - 使用 LINQ 查找重叠的时间段(事件)

c# - 使用 LINQ C# 递归获取所有子级

c# - 删除其他表中没有引用的行

c# - 如何使用 Windows API 将输入发送到 Visual Studio

c# - 为什么 Entity Framework .ToList() with .Include 非常慢,我怎样才能加快速度?

c# - Linq Sql 数据库上下文缺失方法