2010-02-06 3 views
1

Я ищу способ сделать запрос предложения IN в дочерних коллекциях в linq.linq поиск соответствующих элементов в дочерней коллекции

У меня есть пример следующим образом:

Entity: Product.CategoryAssignments - this is an IList<Category> that the product is assigned to. Product can be assigned to multiple categories. 

Я хочу, чтобы получить все продукты соответствия в списке категорий, то есть

IList<Category> selectedCategories = GetUsersSelectedCategories(); 

// как сделать что-то вроде

IList<Products> products = from p in repository where p.CategoryAssignments.Contains(?) select p; 

Любые советы оценили?

ответ

6

Если я неправильно понимаю вопрос, я не думаю, что ответ на самом деле о том, как делать «in» в Linq, потому что вы фактически сравниваете результаты двух списков.

Я не эксперт в этом, так как я не использую Linq на ежедневной основе (я человек NH Criteria), но то, что вы действительно хотите здесь, это либо объединение, либо динамически построенный набор предложений OR?

«Дайте мне все продукты, где категория это или это или это»

Или

«Дайте мне все продукты, где категория это»
союз
«Дайте мне все продукты, где категория это»
союз
„Дайте мне все продукты, где категория это“

Потому что я не все, что о-свершившимся с Linq, я не собираюсь пытаться построить утверждение для этого, но я готов поспорить, что это хорошо документированная проблема в интернетах? :)

[Изменить] Пошел и посмотрел - что-то вроде этой работы?

var query = 
from p in products 
where p.Categories.Any(c=> selectedCategories.Contains(c)) 
select p; 

Где категории Ваш список категорий сравниваемых против

+0

Если изменить что 'selectedCategories.Contains (с)', чтобы сделать его еще более ясным в отношении вопроса, +1, потому что это все-таки правильно ! –

+0

спасибо Ребята - NH Criteria отлично, но с помощью провайдера linq и хочу попробовать и лучше понять linq. действительно полезно. Еще раз спасибо за то, что нашли время. – Chev

+0

Ах рад видеть, что я не лаял неправильное дерево - менялся, чтобы правильно отразить вопрос :) –