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

EF6 How to query where children contains all values of a list

假设我有一个 document table,带有 doc_id (PK) 和 doc_name 字段,category table 带有 cat_id (PK) 和 cat_name 字段,以及 document_categories table 和 doc_id (PK, FK) 和 cat_id (PK, FK) 字段, 因此我可以将一个或多个类别归于每个文档。

我在 "Database first" 模式下使用 EF6 生成了一个模型,它为我提供了两个实体:documentcategory,每个实体都包含一个字段,该字段是子项的集合。
document 包含一个 categories 字段,该字段列出了文档的类别,反之亦然。

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

文档 A:类别 1、3
文件 B:类别 1、2
C 文件:类别 1
文件 D:类别 1、2、3

我的查询应该 return 文档 B 和 D。

如何使用 Linq 通过 EF6 实现这一点?

在此站点和 Google 中搜索了很长时间,但没有找到适合此特定请求的任何内容...感谢您的帮助

使用这个:

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;