[英]EF (LINQ to SQL) - How to query?
我有一个包含关键字的文档。 EF
将文档-关键字连接表抽象为一个关联。
结构看起来像这样
Document: ID (PK)
Document_Keyword: DocumentID (PK), Keyword (PK)
Keyword: Keyword (PK)
我需要返回包含string[]
所有关键字的文档列表。
如果我在SQL中执行此操作,则将与以下内容相似
with t as (
select 'keyword1' KEYWORD union
select 'keyword2'
)
select DocumentID,count(*) from [dbo].[Document_Keyword] p
inner join t on p.KEYWORD = t.KEYWORD
group by DocumentID
having count(*) = (select count(*) from t)
我正在努力形成一个linq
查询,这将给我相同的结果。
我尝试了以下LINQ语句,但是它确实返回包含数组中1个或多个关键字的文档。 我要求仅在所有关键字都匹配的情况下才返回文档。
var query = (from k in db.KEYWORD
from b in k.DOCUMENT
join q in arrKeywords //array of string[]
on k.KEYWORD equals q
select new Document()
{
Filename = b.FILENAME,
Description = b.TITLE
});
有任何想法吗? 干杯杰里米
如果您感觉不错,那么您想要所有关键字完全匹配的条目,即它没有任何其他关键字。 一种实现此目的的方法是
var kwc = arrKeywords.Count();
var query = from k in db.KEYWORD
let kw = k.DOCUMENT.Select(d => d.KEYWORD)
where kw.All(kw1 => arrKeywords.Contains(kw1))
&& kw.Count() == kwc;
生成的查询仍然比手工编码的查询长得多,但是我认为数据库的查询优化器应该能够处理这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.