Using more than one condition in linq's where method

Viewed 110758

I have a line of code using where:

codebase.Methods.Where(x => x.Body.Scopes.Count > 5);

How can I insert more than one condition? So I can say x => predicate && y => predicate?

Thanks

7 Answers

You can roll your separate conditions into a single predicate if you like:

codebase.Methods.Where(x => (x.Body.Scopes.Count > 5) && (x.Foo == "test"));

Or you can use a separate Where call for each condition:

codebase.Methods.Where(x => x.Body.Scopes.Count > 5)
                .Where(x => x.Foo == "test");

no you can't define 2 delegates in the same where but you can build after each other or put both on same condition like this

 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 == ''  ) );

In your example, where does y come from? The Where method takes a lambda with a single input parameter, which represents a single instance of the sequence you're operating against.

You can, of course, have multiple conditions against x:

Where(x => x.Foo > 5 && x.Bar < 3)

What would "y" represent?

You can just use a standard && condition. No need for a "y":

codebase.Methods.Where(x => x.Body.Scopes.Count > 5 && x.Body.SomethingElse < 14);

I don't get it. What can you not do?

codebase.Methods.Where(x => x.Head.IsHairy && x.Body != null && x.Body.Scopes.Count > 5); 

like this..

codebase.Methods.Where(x => x.Body.Scopes.Count > 5 && x.Body.Scopes.Count < 10);
Related