2017-11-01 1 views
0

私は2つのEntity Frameworkのエンティティを持って、多対多の関連: パーソン:PERSONID PersonNameの KewordS(ナビゲーションプロパティ)すべての項目

キーワード:KeywordID KeywordName 人物(ナビゲーションプロパティ)

さらに、いくつかのKeywordIDを持つコレクション(MyFiltersなど)があります。

MyFiltersコレクションのすべてのKeywordIDに一致するすべての人物を取得したいと思います。 問題を解決するための適切なLINQクエリは何でしょうか?

答えて

0

あなたはこのような何かを試すことができます。

_context.Persons.Include("Keywords") 
    .Where(p => MyFilters.Count() == p.Keywords.Count())//equal amount 
    .Where(p => p.Keywords.All(k => MyFilters.Contains(k.KeywordID)));//and all id match 
0

あなたはLINQのの交差を使用することができます。交差カウントがMyFiltersカウントと一致する場合は、MyFilterのすべてのキーワードがそのPersonで検出されたことを意味します。

List<int> MyFilters = new List<int>() { 1,2 }; 
var peopleMatchingAllKeywords = people.Where(pers => 
MyFilters.Intersect(pers.KeyWords.Select(y => y.KeywordID)).Count() == MyFilters.Count()); 
関連する問題