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

人气:566 发布:2022-10-16 标签: entity-framework linq linq-to-entities

问题描述

假设我有一个document表,有doc_id(主键)和doc_name字段,category表有cat_id(主键)和cat_name字段,document_categories表有doc_id(主键,FK)和cat_id(主键,FK)字段,所以我可以为每个文档分配一个或多个类别。

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

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

单据A:类别1、3 单据B:类别1、类别2 单据:类别1 单据D:类别1、2、3

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

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

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

推荐答案

使用此命令:

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;

619