alansiqueira27
alansiqueira27

Reputation: 8506

How to use this LINQ with multiple "Where"?

Say I have this structure:

public class Car
{
   public string Name;
   public IList<Tire> Tires;
}

public class Tire
{
   public string Name;
   public int Size;
}

I want a query to return all Cars that have Tires with size 40.

I am thinking this way, what am I missing?

Cars.Where(x => x.Tires.Where(y => y.Size == 40));

This code throws this error: "Cannot convert lambda expression to delegate type 'System.Func' because some of the return types in the block are not implicitly convertible to the delegate return type"

Upvotes: 1

Views: 97

Answers (2)

Ben Aaronson
Ben Aaronson

Reputation: 6975

You want

Cars.Where(x => x.Tires.Any(y => y.Size == 40));

or

Cars.Where(x => x.Tires.All(y => y.Size == 40));

Depending on the requirement.

Your version won't work because the outer lambda is actually returning an IEnumerable<Tire>, whereas it needs to be a bool.

Upvotes: 8

Ventsyslav Raikov
Ventsyslav Raikov

Reputation: 7192

You should use Any instead.

Cars.Where(x => x.Tires.Any(y => y.Size == 40));

Upvotes: 2

Related Questions