Reputation: 1533
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
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