2013-02-22 74 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();