Iqueryable как подзапрос для фильтрации другого queryable

У меня есть отношения «многие ко многим» (Сайты, Категории, КатегорииXSite) и две определенные переменные, которые можно запрашивать, например:

IQueryable<Site> sitesQuery = from s in db.Sites
                         where s.Name.Contains(siteWord)
                         select s



IQueryable<SiteCategorie> categoriesQuery = from c in db.SiteCategories
                                       where c.Parent.ID == 1
                                       select c;

Я хочу иметь возможность применять фильтр к запрашиваемым категориям на основе запрашиваемых сайтов, чтобы у меня были любые категории с любыми фильтрами, а также другой фильтр категорий, в которых есть сайты, содержащие определенный фильтр, что-то вроде этого:

from c in categoriesQuery 
where c.Sites == sitesQuery
select c

Я задавал аналогичный вопрос раньше, когда мне не нужно было фильтровать категории (здесь)

Большое спасибо,


person Milox    schedule 11.05.2011    source источник
comment
Я любитель программного обеспечения и поклонник лучших практик - лучше всего принимать те ответы, которые, по вашему мнению, лучше всего отвечают на ваш вопрос.   -  person Kirk Broadhurst    schedule 11.05.2011


Ответы (1)


Вы, вероятно, захотите либо

from c in categoriesQuery  
where c.Sites.Any(s => sitesQuery.Contains(s))
select c 

or

from c in categoriesQuery  
where c.Sites.All(s => sitesQuery.Contains(s))
select c 

в зависимости от вашего варианта использования.

person Kirk Broadhurst    schedule 11.05.2011
comment
Хорошее простое и рабочее решение. Большое спасибо - работает как шарм! - person higgsy; 10.05.2013