C# 使用linq比较对象值适用于单个对象,但不适用于对象列表

C# 使用linq比较对象值适用于单个对象,但不适用于对象列表,c#,.net,linq,C#,.net,Linq,我使用两种方法根据提供的keyname和keyvalue返回对象的子集或过滤列表。第一个方法(传递一个keyname和keyvalue)工作正常,但第二个方法(传递一个keyname和一个潜在值列表)总是返回一个空列表。有谁能帮助我了解第二种方法的语法,让我知道我做错了什么 这一个有效: public List<GenericDataObject> FilterItems(string ItemStatus, string KeyName, object KeyValue)

我使用两种方法根据提供的keyname和keyvalue返回对象的子集或过滤列表。第一个方法(传递一个keyname和keyvalue)工作正常,但第二个方法(传递一个keyname和一个潜在值列表)总是返回一个空列表。有谁能帮助我了解第二种方法的语法,让我知道我做错了什么

这一个有效:

public List<GenericDataObject> FilterItems(string ItemStatus, string KeyName, object KeyValue)
    {
        return this.Items.Where(p => p.PropString("ItemStatus") == ItemStatus && p.Prop(KeyName).Equals(KeyValue)).ToList();
    }
这一条没有:

public List<GenericDataObject> FilterItems(string ItemStatus, string KeyName, List<object> KeyValues)
    {
        return this.Items.Where(p => p.PropString("ItemStatus") == ItemStatus && KeyValues.Contains(p.Prop(KeyName))).ToList();
    }

只需将您的条件改写为

KeyValues.Any(x => x.Equals(p.Prop(KeyName)))

我已经编辑了你的标题。请看,如果共识是否定的,他们就不应该。你能发布你用第二种方法尝试过的代码吗?这和使用Contains的结果不一样吗?我有点不清楚该放在哪里。。。我现在有整行代码,但仍然没有得到任何结果:返回this.Items.Wherep=>p.PropStringItemStatus==ItemStatus&&KeyValues.Anyx=>x.Equalsp.PropKeyName.ToList;从p.Prop方法返回的声明类型和实类型是什么?声明类型和返回类型是object。公共对象Propstring KeyName{如果this.containskeyName返回此[KeyName].Value;否则返回null;}是的,我理解。但是这些数据的真实类型呢?看起来列表中的对象与p.Prop调用结果中的数据类型不同。例如,p.Prop调用返回long,并且对象列表包含int。