实体框架多对多选择

时间:2011-11-10 14:13:48

标签: c# .net entity-framework many-to-many

该模型包含2个具有多对多关系的实体:CatalogueItems and Keywords

假设定义了2个变量:

ObjectQuery<Keyword> KW;
ObjectQuery<CatalogueItem> CI;

KW 包含一些用于选择一组关键字的查询。我需要 CI ,从 KW 中选择至少包含一个关键字的所有CatalogueItem。

重要的是:不应预先计算或枚举任何内容。关键字枚举需要花费大量时间,但UI基于实时CatalogueItems显示。一个完美的事情是让 CI 准备好执行。

2 个答案:

答案 0 :(得分:0)

这样的事情:

from catalogueItem in CI
from keyword in KW
where catalogueItem.Keywords.Contains(keyword)
select catalogueItem

编辑: 因此,每次都不计算KW,尝试这样做:

var keywords = KW.ToList()
from catalogueItem in CI
from keyword in keywords
where catalogueItem.Keywords.Contains(keyword)
select catalogueItem

否则,我需要在KW和整个数据库中查看查询,以便能够知道如何优化查询。

另一个选择是简单地编写一个存储过程并将其映射到实体框架。

答案 1 :(得分:0)

context.CatalogueItems.Where(ci=> ci.Keywords.Where(cik=>KW.Any(cik)));

那样的东西?请检查语法。