LINQ, где проверка количества - PullRequest
0 голосов
/ 24 августа 2011

Так что я постепенно осваиваю синтаксис LINQ, но этот запрос сводит меня с ума ..

Я хочу вернуть только фильтры с более чем одним значением фильтра. Я пытался поместить группу на fv, но тогда p выходит из области видимости.

        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();

Что я делаю не так?

Мне в идеале нужно:

        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();

Спасибо

1 Ответ

1 голос
/ 24 августа 2011

Вы можете написать запрос следующим образом, добавив еще одно объединение в _db.FilterValues, но проецируя результат в группу, используя ключевое слово into

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();
...