0

我有一个实体,比如说调用它Blog。每个Blog实体都有很多Keyword. 这 2 个通过关键字表上的 fk 相关联。

我有一个带有这样签名的查询FindAllBlogByKeywords(IEnumerable<string> keywords)

我将如何编写一个 linq 查询来提取与参数中所有关键字匹配的任何博客。

问题是 EF 不允许可枚举和表之间的连接。它也不包含,因为我希望查询匹配所有关键字,而不仅仅是任何一个 - 除了我有 2 个关键字列表,我需要参数中的关键字是持久性中关键字的子集。

4

1 回答 1

6

您可以为每个关键字添加 .Where 子句:

IEnumerable<Blog> FindAllBlogByKeywords(IEnumerable<string> keywords)
{
     IQueryable<Blog> query = context.Blogs;

     foreach(string key in keywords)
         query = query.Where(blog => blog.Keywords.Contains(key));

     // Execute query (optional)
     return query.ToList();
}

这是有效的,因为查询执行被推迟到最后。通过链接多个.Where子句,您可以有效地创建“ALL”语句。

于 2012-07-10T19:42:57.033 回答