在linq的where where方法中使用多个条件

Gur*_*epS 37 c#

我有一行代码使用:

codebase.Methods.Where(x => x.Body.Scopes.Count > 5);
Run Code Online (Sandbox Code Playgroud)

如何插入多个条件?所以我可以说x => predicate && y => predicate

谢谢

Luk*_*keH 84

如果您愿意,可以将单独的条件转换为单个谓词:

codebase.Methods.Where(x => (x.Body.Scopes.Count > 5) && (x.Foo == "test"));
Run Code Online (Sandbox Code Playgroud)

或者您可以Where为每个条件使用单独的调用:

codebase.Methods.Where(x => x.Body.Scopes.Count > 5)
                .Where(x => x.Foo == "test");
Run Code Online (Sandbox Code Playgroud)

  • OR条款怎么样?乘以.将充当AND (4认同)
  • @alaxid:我希望第二个*稍微慢一点,因为每个`Where`调用会产生一些额外的开销(方法调用,委托调用等).我不会在任何正常的日常情况下担心这一点. (3认同)
  • 考虑到的信息太多大的条款,就这两种情况下具有相同的复杂性或者是第一个慢? (2认同)

Amg*_*hmi 6

不,你不能在同一个地方定义2个代表,但你可以在彼此之后建立或者将两者放在相同的条件下

 var result = codebase.Methods.Where(x => x.Body.Scopes.Count > 5 && x.Body.Scopes.name == "" );

or 

 var result = codebase.Methods.Where(x => x.Body.Scopes.Count > 5 )
        .where( y=> y.Body.Scopes.name == '' );

or 

 var result = codebase.Methods.Where(x => x.Body.Scopes.Count > 5  )
.Union( codebase.Methods.Where(y => y.Body.Scopes.name == ''  ) );
Run Code Online (Sandbox Code Playgroud)