我可以使用Contains方法的嵌入式lambda吗?

时间:2011-05-23 21:33:56

标签: c# linq lambda contains

我想使用FindAll

过滤列表

如果我写:

.FindAll(
    p => p.Field == Value && 
    p.otherObjList.Contains(otherObj));

没关系,但是如果我写的话

.FindAll(
    p => p.Field == Value && 
    p.otherObjList.Contains(
        q => q.Field1 == Value1 && 
        q.Field2 == Value2));

我收到C#语法错误消息:未知方法FindAll(?)of ... otherObjList

我无法准确定义otherObj,因为我只知道两个字段Field1和Field2的值。

我做错了什么?在这种情况下我该怎么办?

1 个答案:

答案 0 :(得分:7)

大多数集合类型的Contains()方法以及LINQ版本都需要一个与集合相同类型的参数,而不是lambda。

看起来您只是想检查是否有任何项目符合某些条件。您应该使用Any()方法。

.FindAll(p => p.Field == Value
           && p.otherObjList.Any(q => q.Field1 == Value1 && q.Field2 == Value2))