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

Sie*_*ike 4 linq linq-to-entities entity-framework

假设我有一个document包含doc_id(PK) 和doc_name字段的表,一个category包含cat_id(PK) 和cat_name字段的表,以及一个document_categories包含doc_id(PK, FK) 和的表cat_id(PK, FK) 字段的表,因此我可以为每个文档分配一个或多个类别。

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

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

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

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

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

在这个网站和谷歌上搜索了很长时间,但没有找到适合这个特定请求的内容...感谢您的帮助

Tah*_*ooy 8

用这个:

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

或者

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;
Run Code Online (Sandbox Code Playgroud)