Leigh
Leigh

Reputation: 1533

LINQ Where Count Check

So I'm slowly getting my head around the LINQ syntax, but this query's driving me nuts..

I only want to return filters with more than one filter value.. I've tried putting a group by on fv but p goes out of scope then..

        var filters = (from p in _db.Products
                  join pf in _db.ProductFilterSets on p.ProductID equals pf.ProductID
                  join fv in _db.FilterValues on pf.FilterValueID equals fv.FilterValueID
                  join f in _db.Filters on fv.FilterID equals f.FilterID
                  where products.Contains(p) 
                  select f).Distinct();

What am I doing wrong?

I ideally need:

        var filters = (from p in _db.Products
                  join pf in _db.ProductFilterSets on p.ProductID equals pf.ProductID
                  join fv in _db.FilterValues on pf.FilterValueID equals fv.FilterValueID
                  join f in _db.Filters on fv.FilterID equals f.FilterID
                  where products.Contains(p) && fv.Count() > 1
                  select f).Distinct();

Thank you

Upvotes: 0

Views: 201

Answers (1)

Aducci
Aducci

Reputation: 26664

You can write the query like this, adding another join on the _db.FilterValues but projecting the result to a group by using the into keyword

var filters = (from p in _db.Products
               join pf in _db.ProductFilterSets on p.ProductID equals pf.ProductID
               join fv in _db.FilterValues on pf.FilterValueID equals fv.FilterValueID into fvg
               join fv in _db.FilterValues on pf.FilterValueID equals fv.FilterValueID
               join f in _db.Filters on fv.FilterID equals f.FilterID
               where products.Contains(p) && fvg.Count() > 1
               select f).Distinct();

Upvotes: 1

Related Questions