2013-02-22 4 views
1

У меня есть три таблицы в БД, как это:Выберите вложенный список

продукты

+----+------+ 
| id | name | 
+----+------+ 
| 1 | prod1| 
+----+------+ 

значения

+----+---------+---------+ 
| id | value | alias | 
+----+---------+---------+ 
| 1 | 10 g | 10m | 
+----+---------+---------+ 

prdoucts_values ​​

+---------------+---------+ 
| product_id | value_id| 
+---------------+---------+ 
|  1  | 1  | 
+---------------+---------+ 

Как выбрать все продукты DB, которые имеют любое значение от List<Values.alias>?

+0

Вы используете EF, Linq2SQL, или? –

+0

Классы EF и POCO –

ответ

1
List<decimal> aliases = ... 
var query = db.Products.Where(p => p.Values.Any(v => aliases.Contains(v.Alias))); 

Или (если вы не имеете навигационные свойства)

var query = from p in db.Products 
      join pv in db.ProductsValues on p.ProductId equals v.ProductId 
      join v in db.Values on pv.ValueId equals v.ValueId into values  
      where values.Any(v => aliases.Contains(v.Alias)) 
      select p 
+0

Приятно, но если модель продукта не ограничена знаками? –

+0

@AlexanderShlinchack см. Мое обновление с ручным подключением, должно работать :) –

0

Если вы используете EF (база данных первого), то таблица prdoucts_values не является частью conseptual модели.

вместо EF ГВСИ вам прямой путь от Products к Values Поэтому вы можете написать запрос, который выглядит примерно так:

var lst = new List<Products>(); 
lst = db.Products.Where(c => c.Values.Any()).ToList();