所有项目都与所有集合关键字匹配

时间:2017-11-01 11:36:48

标签: entity-framework linq entity

我有两个实体框架实体,多对多相关: 人:PersonID         PERSONNAME         KewordS(导航属性)

关键字:KeywordID          关键字名称          人员(导航属性)

另外,我有一个KeywordID的集合(比方说,MyFilters)。

我想让每个人都匹配MyFilters集合中的所有KeywordID。 什么应该是适当的LINQ查询来解决问题?

2 个答案:

答案 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());