Je suis aux prises avec ce que je pensais être une simple requête ...LINQ Tout() ne fonctionne pas comme prévu
schéma est comme:
Documents
(DocumentID, Nom)
Industries
(IndustryID, Nom)
Documents_Industries
(DocumentID, IndustryID)
données est comme:
Doca - Industrya
DocB - Industrya, IndustryB
CCOP - Industrya, IndustryB
DOCD - IndustryB
(Ainsi, les données ci-dessus se traduira par 6 lignes de Documents_Industries
, espérons que soi-même -explanatoire)
Comportement attendu: J'essaie d'afficher une liste de documents, filtrés par le (s) secteur (s) sélectionné (s) par l'utilisateur. Si IndustryA est sélectionné, l'ensemble de résultats doit être DocA, DocB, DocC. Si IndustryB est sélectionné, le jeu de résultats doit être DocB, DocC, DocD. Si IndustryA et IndustryB sont sélectionnés, le jeu de résultats doit être DocB, DocC.
jusqu'à présent code:
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)));
}
Comportement réel: Si Industrya et IndustryB est sélectionné, le jeu de résultats est Doca, DocB, CSDC, DOCD. Au lieu de simplement DocB, DocC.
J'ai essayé avec .All()
mais cela ne fonctionne pas non plus. Que pourrais-je faire de mal?
Tout serait plus proche, mais il serait plus comme 'l => SelectedIndustries.All (m => m.Contains (...' – BradleyDotNET
Vous utilisez beaucoup à beaucoup et si IndustryA et IndustryB est sélectionné pourquoi vous voulez exclure le document A et le document B. Ils ont tous les deux ces industries – kat1330
@ kat1330, parce que c'est l'exigence :) Le filtre de l'utilisateur est plus que OU - "obtenir tous les documents qui ont ces deux industries" – user982119