2010-09-17 20 views
6

Sto costruendo un widget sondaggio. Ho 2 tavoli, li chiamo Polls e PollsCompleted. Devo eseguire una query linq per ottenere tutti i sondaggi che non esistono per un determinato utente in PollsCompleted.Linq-to-sql Non contiene o non contiene?

ho i seguenti set:

Per Sondaggi Dove attiva == true

Per PollsCompleted Dove UserId == ThisUserId Dove PollId = Polls.Id

Ora ho bisogno di ottenere tutti i sondaggi che non esistono in PollsCompleted. Ho bisogno di un esempio per questo usando una singola o più query. Ho provato a scomporlo in 2 query.

Fondamentalmente, ho 2 IQueryables di tipo T e T1. Voglio prendere tutte le T in cui T.ID non esiste in T1.ParentId.

+1

Sai che puoi applicare "!" operatore a .Contains()? –

risposta

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

in LINQ si lavora spesso dal basso verso l'alto. Qui per prima cosa otteniamo una raccolta di tutti i parentID in T1 - la parte T1.Select (...). Quindi creiamo una clausola where che seleziona tutti i Ts i cui ID non sono contenuti in quel set.

Si noti che il risultato è una query. Per materializzarlo, utilizzare ToList() o simile nella dichiarazione di cui sopra.

+0

Grazie mille! Questo funziona. –

Problemi correlati