2013-02-22 119 views
1

我在DB三個表是這樣的:選擇嵌套列表

產品

+----+------+ 
| 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,還是? – 2013-02-22 09:15:46

+0

EF和POCO類 – 2013-02-22 09:20:40

回答

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

不錯,但是如果產品模型不與值綁定? – 2013-02-22 09:22:04

+0

@AlexanderShlinchack查看我的手動加入更新,應該工作:) – 2013-02-22 09:28:03

0

如果使用EF(數據庫第一),那麼表prdoucts_values不是conseptual模型的一部分。

代替EF GIVS你ProductsValues 的直接路徑因此,您可以編寫一個查詢,看起來像這樣:

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