繁体   English   中英

EF(LINQ to SQL)-如何查询?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM