2016-07-21 12 views
0

Ich brauche eine Linq-Abfrage, die null zurückgibt, wenn nicht alle Zeilen übereinstimmende Zeichenfolge innerhalb einer List<string> für jede hardware_id-Spalte haben.Vollständige Übereinstimmung mit einer Liste von Zeichenfolgen pro ID

Ich habe die folgende Tabelle:

  • id (int) - Primary Key
  • (String)
  • user_id (int)
  • hardware_id (int)

Ich habe eine List<string>, die Sätze enthalten. Ich möchte, dass die Abfrage die hardare_id-Nummer zurückgibt, wenn alle Ausdrücke in der Liste übereinstimmende Zeichenfolgen in der Namenszeile enthalten. Wenn eine der Phrasen keine name Übereinstimmung hat, um null zurückzugeben, und wenn alle Phrasen für jede hardware_id für alle Phrasen vorhanden sind, sollte die Abfrage die Liste der hardware_ids zurückgeben, mit denen jede dieser hardware_ids vollständig übereinstimmt alle Phrasen innerhalb der Liste.

Oder mit anderen Worten, geben Sie eine Liste von hardware_id 's, dass jede ID, hat seine name' s die gleichen in der List<string>.

Ich dachte daran, jede ID in einer anderen Abfrage zu wiederholen, aber es ist kein effektiver Weg, es zu tun. Vielleicht kennst du eine gute Frage, um das anzugehen. Ich benutze Entity Framework 6/C#/MySQL

Hinweis: Die Abfrage erfolgt nur pro Benutzer-ID. Daher filtere ich die Tabelle zuerst nach der Benutzer-ID und suche dann die passenden hardare_id's, die die Bedingung erfüllen.

Antwort

1

Gruppe auf hardware_id und dann für alle Sätze Existenz in der es List

table.GroupBy(x=>x.hardware_id) 
    .Where(x=> x.All(s=> phrases.Contains(s.name)) 
    .Select(x=>x.Key); 
+0

Ich werde versuchen, jetzt schauen, ich war in der Nähe, beginne ich mit auf der hardware_id mit Gruppe und ich darüber dachte Iterieren mit für jeder, aber deins sieht wie eine glatte Abfrage-nur-Lösung aus. –

+0

Wo füge ich die Filterung user_id hinzu? Ich muss einen weiteren Filter zum Where-Bereich hinzufügen. –

+1

Ich würde vorschlagen, es in 'Where' Bedingung selbst zu platzieren. –

Verwandte Themen