2017-04-12 6 views
0

Abfrage Ich habe eine Abfrage, wo in der WHERE-Anweisung, die ich für Werte überprüfen, wo ein Hashset eine Spalte enthält, das heißt:Überprüfung für jeden Wert in Hashset wenn

var cHashset = {"cat","dog","bird"} 

Datenbank wie folgt aussieht:

ID Category 
1  dog 
1  cat 
1  bird 
2  dog 
3  cat 
3  dog 
4  bird 

Dann gilt für den Bereich Wo der Abfrage ich habe:

.Where(o => cHashset.Contains(o.Category)) 
.Select (o => o.ID).Distinct(); 

Wie kann ich sicher, dass ich nur ausgewählte Werte machen wher e sie haben Kategorien von Katze, Hund UND Vogel? Das obige Setup funktioniert gut, wenn es nur nach einer Kategorie sucht, aber nicht, wenn ich alle Kategorien versichern muss.

Danke für Ihre Hilfe.

+0

Sie wollen also alle diese IDs, wo alle drei Kategorien vorhanden sind ('1' in Ihrem Beispiel, wenn ich Recht habe)? – HimBromBeere

+0

Korrigieren. @HimBromBeere – yondaimehokage

Antwort

1

Sie müssen zuerst nach Ihrer ID gruppieren. Jetzt können Sie schauen, ob alle Elemente Ihrer cHashSet in den Kategorien der gegebenen Gruppe enthalten sind.

var result = myData.GroupBy(x => x.ID) 
    .Where(x => cHashSet.All(y => x.Select(z => z.Category).Contains(y))) 
    .Select(x => x.ID); 
+0

Sie verpassten das Schließen einer Erweiterung '.Where (' Ich denke. – Alyafey

+0

@ Alyafey Tatsächlich haben Sie Recht. Korrigiert. – HimBromBeere

Verwandte Themen