Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# linq谓词从集合中删除对象问题_C#_Linq - Fatal编程技术网

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

C# linq谓词从集合中删除对象问题,c#,linq,C#,Linq,我正在试图找出我的委托函数不起作用的原因,如果您能提供任何帮助,我将不胜感激。这可能是个小问题,但我已经研究了一段时间,无法理解,我的代码: //remove all matching people from this list public void RemovePeopleFromLookup(Predicate<PeopleDTO> _people) { //Lookup is an internal readonly ICollection of PeopleDTO

我正在试图找出我的委托函数不起作用的原因,如果您能提供任何帮助,我将不胜感激。这可能是个小问题,但我已经研究了一段时间,无法理解,我的代码:

//remove all matching people from this list
public void RemovePeopleFromLookup(Predicate<PeopleDTO> _people)
{
   //Lookup is an internal readonly ICollection of PeopleDTO
   Lookup.RemoveAll(_people);
}
出于某种原因,所有人都会从此查找中删除,这是不正确的,我只想删除那些被删除的人

  • 奇怪的
  • 数据收集中不存在的人
  • 编辑:

    数据采集可以是不同类型的对象
    ->奇怪、嘈杂等。。。 mylookupobj.Lookup数据收集与数据收集类似,包含多种类型,因此我以这种方式编写查询

    编辑2:我错过了这个可能非常重要的信息

    public class PersonDTO
    {
    //Name
    //Type
    //Age
    //Desc
    }
    

    在mylookupobj.Lookup中-所有属性都包含数据,但是在数据集合中只存在名称+类型。

    调用Any是问题所在。本质上,它在集合中运行了多次。i、 e.如果集合中的任何对象与条件匹配,请删除该项。试试这个:

    mylookupobj.RemoveFieldFromLookup(y => y.Name == x.Name && x.Type == FieldElement.Strange);
    

    更简单、更有效的谓词是:

    x => (x.Type == FieldElement.Strange) && data.Any(y => y.Name == x.Name)
    
    但我承认,我认为这两种方法都没有主要问题

    编辑:似乎其中一个条件必须颠倒

    x => (x.Type == FieldElement.Strange) && ! data.Any(y => y.Name == x.Name)
    
    请试试这个

    mylookupobj.RemovePeopleFromLookup(x => data.Contains(y => y.Name == x.Name) 
         && x.Type == FieldElement.Strange);
    

    我需要参考数据-我已经修改,使数据粗体对不起。。。我刚刚意识到我的问题是要删除数据收集中存在的所有内容,这意味着。。。删除mylookupobj.Lookup中的所有对象,这些对象在数据收集中不存在,您能更新您的答案吗?我想我知道我错在哪里了!我把事情搞砸了,非常感谢你的帮助这是lambda不是谓词吗?它看起来像一个很好的谓词lambda
    mylookupobj.RemovePeopleFromLookup(x => data.Contains(y => y.Name == x.Name) 
         && x.Type == FieldElement.Strange);