我有两个实体框架实体,多对多相关: 人:PersonID PERSONNAME KewordS(导航属性)
关键字:KeywordID 关键字名称 人员(导航属性)
另外,我有一个KeywordID的集合(比方说,MyFilters)。
我想让每个人都匹配MyFilters集合中的所有KeywordID。 什么应该是适当的LINQ查询来解决问题?
答案 0 :(得分: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
答案 1 :(得分:0)
你可以使用Linq intersect。如果交集计数与MyFilters计数匹配,则表示找到了该Person的所有MyFilter关键字。
List<int> MyFilters = new List<int>() { 1,2 };
var peopleMatchingAllKeywords = people.Where(pers =>
MyFilters.Intersect(pers.KeyWords.Select(y => y.KeywordID)).Count() == MyFilters.Count());