选择嵌套列表

时间:2013-02-22 09:08:39

标签: linq entity-framework select

我在DB中有三个表:

产品

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

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

prdoucts_values

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

如何从数据库中选择具有List<Values.alias>的任何值的所有产品?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果您使用EF(数据库优先),则表prdoucts_values不是概念模型的一部分。

相反,EF为您提供从ProductsValues的直接路径 因此,您可以编写如下所示的查询:

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