2010-09-17 12 views
6

Ich baue ein Umfrage-Widget. Ich habe 2 Tabellen, nennen sie Umfragen und Abstimmungen. Ich brauche eine Linq-Abfrage, um alle Umfragen zu erhalten, die für einen bestimmten Benutzer in PollsCompleted nicht existieren.Linq-to-sql Enthält nicht oder nicht in?

Ich habe folgende Sätze:

Für Umfragen Wo Aktiv == true

Für PollsCompleted Wo UserId == ThisUserId Wo PollId = Polls.Id

Jetzt muss ich bekommen Alle Umfragen, die nicht in PollsCompleted existieren. Ich brauche dafür ein Beispiel mit einer oder mehreren Abfragen. Ich habe versucht, es in 2 Abfragen zu unterteilen.

Grundsätzlich habe ich 2 IQueryables vom Typ T und T1. Ich möchte alle T nehmen, wo T.ID nicht in T1.ParentId existiert.

+1

Wissen Sie, dass Sie das "!" Operator zu .Contains()? –

Antwort

15
T.Where(x => ! T1.Select(y => y.ParentID).Contains(x.ID)) 

In Linq arbeiten Sie oft von unten nach oben. Hier erhalten wir zuerst eine Sammlung aller parentIDs in T1 - der T1.Select (...) Teil. Dann erstellen wir eine WHERE-Klausel, die alle Ts auswählt, deren IDs nicht in diesem Satz enthalten sind.

Beachten Sie, dass das Ergebnis eine Abfrage ist. Um es zu materialisieren, verwenden Sie ToList() oder ähnliches in der obigen Anweisung.

+0

Vielen Dank! Das funktioniert. –

Verwandte Themen