我有一个包含关键字/ s的文档的概念。 EF
将document-keyword连接表抽象为关联。
结构看起来像这样
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语句,但它会返回包含数组中一个或多个关键字的文档。我要求只有在所有关键字匹配时才会返回文档。
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
});
有什么想法吗? 干杯 杰里米
答案 0 :(得分:0)
如果我能帮到你,你想要所有关键词完全匹配的词条,即它没有任何其他关键词。一种实现这一目标的方法是
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;
生成的查询仍然比手工编码的查询长得多,但我认为数据库的查询优化器应该能够处理这个问题。