0

私はエンティティを持っています。たとえば、それを呼び出しますBlog。各Blogエンティティには多くのがありKeywordます。2つは、キーワードテーブルのfkを介して関連付けられています。

このような署名のあるクエリがありますFindAllBlogByKeywords(IEnumerable<string> keywords)

パラメータ内のすべてのキーワードに一致するブログをプルするlinqクエリを作成するにはどうすればよいですか。

問題は、EFが列挙可能テーブルとテーブル間の結合を許可していないことです。クエリを1つだけでなくすべてのキーワードに一致させたいので、どちらも含まれていません-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 に答える