Я сражает с тем, что я думал, будет простой запрос ...LINQ Any() не работает, как ожидалось
Схема подобна:
Documents
(DocumentID, Name)
Industries
(IndustryID, имя)
Documents_Industries
(DocumentID, IndustryID)
данных, как:
ДОКА - IndustryA
DocB - IndustryA, IndustryB
DOCC - IndustryA, IndustryB
DocD - IndustryB
(Таким образом, приведенные выше данные приведут к 6 строк в Documents_Industries
, мы надеемся, что это сам -explanatory)
Ожидаемое поведение: Я пытаюсь показать список документов, отфильтрованных промышленностью (пользователями), которую пользователь выбирает. Если выбрана 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 выбран, набор результатов ДОКА, DocB, DOCC, DocD. Вместо DocB, DocC.
Я пробовал с .All()
, но это тоже не работает. Что я могу делать неправильно?
Все было бы ближе, но было бы больше похоже на 'л => SelectedIndustries.All (т => m.Contains (...' – BradleyDotNET
Вы используете много для многих, и если выбрана IndustryA и IndustryB, почему вы хотите исключить документ A и документ B. Они оба имеют эти отрасли. – kat1330
@ kat1330, потому что это требование :). Фильтр пользователя больше И чем OR - «получить все документы, в которых есть обе эти отрасли». – user982119