LINQ Any()无法正常工作

时间:2017-02-17 21:24:22

标签: c# entity-framework linq

我正在与我认为简单的查询作斗争......

架构就像

Documents(文件ID,姓名)
Industries(行业ID,姓名)
Documents_Industries(DocumentID,IndustryID)

数据就像

DocA - IndustryA
DocB - IndustryA,IndustryB
DocC - IndustryA,IndustryB
DocD - IndustryB

(因此上面的数据会导致Documents_Industries中的6行,希望这是不言自明的

预期行为:我试图显示一个文档列表,按用户选择的行业进行过滤。如果选择了IndustryA,则结果集应为DocA,DocB,DocC。如果选择了IndustryB,则结果集应为DocB,DocC,DocD。 如果选择了IndustryA和IndustryB,结果集应为DocB,DocC。

到目前为止

代码

IEnumerable<Document> docs = db.Documents.Where(l => l.IsActive == true);

// industryIdsSelected is an int[] from the user's selection

if (industryIdsSelected.Length > 0)
{
    docs = docs.Where(l => l.Industries.Any(m => industryIdsSelected.Contains(m.IndustryID)));
}

实际行为:如果选择了IndustryA和IndustryB,则结果集为DocA,DocB,DocC,DocD。而不仅仅是DocB,DocC。

我已尝试使用.All(),但这也不起作用。我能做错什么?

1 个答案:

答案 0 :(得分:2)

您需要同时使用AllAny

docs.Where(l => industryIdsSelected.All(x => l.Industries.Any(m => m.IndustryID == x)));