EF6如何查询子项包含列表的所有值的位置

时间:2015-08-14 07:37:24

标签: linq entity-framework linq-to-entities

假设我有document表,doc_id(PK)和doc_name字段,categorycat_id(PK)和{{ 1}}字段,以及cat_name(PK,FK)和document_categories(PK,FK)字段的doc_id表,因此我可以将一个或多个类别归于每个文档。< / p>

我已经在&#34;数据库优先&#34;中生成了一个带有EF6的模型。模式,它为我提供了两个实体:cat_iddocument,每个实体都包含一个子集合的字段。
category包含document字段,其中列出了文档的类别,反之亦然。

现在,我想查询包含类别1和类别2的所有文档。 我们假设数据库包含以下文档:

文件A:类别1,3 文件B:类别1,2 C编:类别1 Doc D:类别1,2,3

我的查询应该返回文档B和D.

如何使用Linq使用EF6实现这一目标?

在此网站和Google上进行了长时间搜索,但未发现此特定请求...感谢您的帮助

1 个答案:

答案 0 :(得分:2)

使用此:

var ids = new int[]{1,2};
var docs = context.Documents
           .Where(d=> ids.All(cid=> d.Categories.Any(dc=>dc.cat_id == cid))).ToList();  

或者

var ids = new int[]{1,2};
var result = from d in context.Documents
         where ids.All(id => d.Categories.Any(dc=> dc.cat_id == id))
         select s;