Ich brauche eine Abfrage, die mir hilft, dies zu lösen.Gruppieren nach Abfrage, jede Gruppe muss keinen Eintrag haben, der nicht in einer Liste enthalten ist
Hier ist meine Tabelle 'Tags':
- id (int)
- Name (String)
- user_id (int)
- hardware_id (int)
Ich bin Gruppierung der Ergebnisse der Tabelle "Tags" nach Hardware-ID. Ich habe auch eine Liste von Tags (List<string>
).
Ich möchte die Hardware-ID der Gruppen erhalten, die alle Tags in der benutzerdefinierten Liste in der obigen Tabelle bei name
übereinstimmen.
Mit anderen Worten, ich möchte die Hardware-IDs erhalten, dass die benutzerdefinierten List-Tags ihre name
entspricht. Möglicherweise gibt es name
, die keine Übereinstimmung in der benutzerdefinierten Liste hat, aber alle benutzerdefinierten List-Tags müssen in der Gruppe sein, und wenn es diese Anforderung erfüllt, kann ich die ID dieser Gruppe.
Ich fand es schwer zu erklären und ich bekam keine Antwort dafür. Ich dachte daran, es mit foreach zu machen, weil es so schwer zu lösen war, aber ich konnte es auch nicht und es ist sehr ineffizient, es so zu machen.
Beispiel:
Liste: [ 'tag1', 'tag2']
Tabellenzeilen:
1, tag1, 5, 1
2, tag2, 5, 1
3, tag3, 5, 1
4, tag4, 5, 2
5, tag5, 6, 2
In diesem Fall sollte ich die hardware_id von 1 bekommen, denn obwohl ein der Hardware-IDs haben tag3, es hat keine Zeilen mit einem Tag-Namen, der nicht in der Liste ist. WENN die Liste "tag4" hätte, würde die hardware_id = 1 NICHT zurückgegeben werden, da die Liste ein Tag hat, das die Gruppe hardware_id nicht hat.
Wenn die Gruppe über kein Element verfügt, das die Liste enthält, wird es nicht im Endergebnis angezeigt.
mir jemand diesen Code Spiel, aber es hat nicht funktioniert:
List<decimal> matchingHardareIds = db.tags.GroupBy(x => x.hardware_id)
.Where(x => x.All(s => tags.Contains(s.name.ToLower()) || 0 == tags.Count() && (s.user_id == userId)))
.Select(x => x.Key).ToList();
In dieser Abfrage, wenn ich einen Tag in der Liste haben und in der Tabelle Ich habe mehrere Artikel mit hardware_id 1 und einem der Sie haben einen 'name', der gleich dem Wert in der Liste ist. Es werden leere Ergebnisse zurückgegeben. Dies liegt daran, dass die Zeilen in der Tabelle für eine bestimmte Gruppe nach Hardware-ID eine Zeile mit einem Namen enthalten, der nicht in der benutzerdefinierten Liste angezeigt wird.
Ich brauche eine Abfrage in Entity Framework oder Linq. Danke vielmals.
Wenn dies funktioniert, gebe ich Ihnen alle meine Stackoverflow-Punkte –
Für das Beispiel, das Sie angegeben haben, habe ich es getestet, und es hat funktioniert. –
Ich liebe dich! dies ist ein coder kuss <<<> >> Danke !! –